itoa是非标准C语言和C++语言扩展函数。由于它不是标准C/C++语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器会在<stdlib.h>/<cstdlib>头文件中包含这个函数。
功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。(标准库中有sprintf,功能比这个更强)
本列没考虑浮点型等数,只做了简略的功能实现;
itoa()的实现代码:
#include <stdio.h>
void my_itoa(int n, char arr[])
{
int sign = n; //标记数字
int i = 0,j = 0;
if(sign < 0) //如果输入的数为负数,变为正数
{
n = -n;
}
do{
arr[i++] = n % 10 + '0'; //ASCII码中字符数字相差48,+ '0'是保证可移植性
}while((n /= 10) >0); // 取下一个数
if(sign < 0)
{
arr[i++] = '-'; //如果为负数,加负号
}
arr[i] = '\0'; //最后一位加结束符号
for(j = i;j >= 0;j--) //截取时为逆序,所以要再逆序输出
{
printf("%c",arr[j]);
}
}
int main()
{
int n;
char arr[100] = {0};
printf("input num:\n");
scanf("%d",&n);
printf("string:\n");
my_itoa(n,arr);
printf("\n");
}
atoi()的简略实现代码:
#include <stdio.h>
int main()
{
unsigned char *p = "1234";
unsigned int date = 0;
unsigned int my_atoi(unsigned char *p);
date = my_atoi(p);
printf("%d\n",date);
return 0;
}
unsigned int my_atoi(unsigned char *p)
{
unsigned int date = 0;
while(1)
{
if(*p == '\0')
{
break;
}
date = (int)*p - '0' +(date * 10);//ASCII 码中字符和数字相差48
p++;
}
return date;
}