功能:將任意類型的整數轉換為字符串。在<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();
}