功能:将任意类型的整数转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。
用法:char
*itoa(int value,
char
*string,int radix);
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等,因此可以使用该函数实现十进制转换成二进制或8进制或16进制。
#include <stdlib.h>
#include <stdio.h>
int main(void)
{int number=123456;char string[25];itoa(number,string,10);printf("integer=%d string=%s\n",number,string);return 0;
}
那么如何来用自己的语言来写呢?
#include <iostream>
#include <stdio.h>
//将整数转换为十进制字符串,并且不用itoa
int main()
{int num=12345;int i=0,j=0;char str[7],temp[7];while (num){temp[i++]=num%10+'0';num/=10;}temp[i]='\0';i=i-1;while (i>=0){str[j++]=temp[i--];}str[j]='\0';printf("string=%s\n",str);return 0;
}
方法是先加‘0’,再逆序的办法,整数加'0'就会隐形的转换为char型的数。
但需要注意的是:负整数不能通过itoa被转化为二进制、八进制、十六进制,而正整数可以。请看如下的代码:
#include <stdio.h>
#include<stdlib.h> void main()
{char str[8]; int i=-2; itoa(i,str,2); printf("%d的二进制数为: %s\n\n",i,str);
}
vc输出:
-2的二进制数为: 11111111111111111111111111111110
并且出现警示框:
正整数就可以了。
#include <stdio.h>
#include<stdlib.h> void main()
{char str[8]; int i=2; itoa(i,str,2); printf("%d的二进制数为: %s\n\n",i,str); }
结果:
2的二进制数为: 10请按任意键继续. . .
上述代码不能实现负整数与0转化为字符串,补充另一种做法:
#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;
void int2str(int n,char* str)
//n可以为正整数、0、负整数
{
char temp[10];
if (str==NULL)
{
return;
}
int i=0;
int n2=n>=0?n:-n;//n2为n的绝对值
if (n2==0)
{
temp[i++]='0';
}
while (n2)
{
temp[i++]=n2%10+'0';
n2/=10;
}
temp[i]='\0';
i--;
int j=0;
if (n<0)
{
str[j]='-';
j++;
}
while (i>=0)
{
str[j++]=temp[i--];
}
str[j]='\0';
}
void test(char* testname,int n,char* expected)
{
if(testname!=NULL)
cout<<testname<<" "<<"begins:";
char str[10];
int2str(n,str);
if (strcmp(str,expected)==0)
{
cout<<"passed"<<endl;
}
else
{
cout<<"Failed"<<endl;
}
}
//输入150
void test2()
{
int n;
cin>>n;
test("test1",n,"150");
}
//输入0
void test3()
{
int n;
cin>>n;
test("test2",n,"0");
}
//输入-50
void test4()
{
int n;
cin>>n;
test("test3",n,"-50");
}
void main()
{
test2();
test3();
test4();
}