功能:将任意类型的整数转换为字符串。在<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();
}