有2种方式实现,其中两种是使用系统函数,另一种是直接自己编写。
下面的代码就是2种方式的实现,包括任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。
1. 利用系统函数。sprintf(str,"%d",value);str是转化存储的位置,%d表示十进制格式,value是要转化的数字。所以代码可以为:
char * itoa(int n, char * p)
{
sprintf(p, "%d", n);
return (p);
}
2. 自己编写。由于计算方法是每次都除以10和对10取余数,余数以倒序的顺序排列就是结果,所以最佳方法是用递归函数(当然循环也可以,但需要最后再进行倒序)。递归代码如下:
static int i = 0;
char * itostr(int n, char * p)//递归函数
{
if (n < 10) //递归结束条件
{
p[i] = n + '0'; //当前数转换成字符放入字符串
}
else
{
itostr(n / 10, p);//递归调用
i++; //字符串索引+1
n %= 10; //计算当前值
p[i] = n + '0'; //当前数转换成字符放入字符串
}
p[i+1] = '\0'; //字符串结束标志
return (p);
}
char * itoa(int n, char * p)
{
i = 0;//初始化下标为0
itostr(n, p);
}
最后测试代码如下(以自己编为例,其余只要替换intoa函数中的代码内容即可):
#include
static int i;
char * itostr(int n, char * p)//递归函数
{
if (n < 10) //递归结束条件
{
p[i] = n + '0'; //当前数转换成字符放入字符串
}
else
{
itostr(n / 10, p);//递归调用
i++; //字符串索引+1
n %= 10; //计算当前值
p[i] = n + '0'; //当前数转换成字符放入字符串
}
p[i+1] = '\0'; //字符串结束标志
return (p);
}
char * itoa(int n, char * p)
{
i = 0;//初始化下标为0
itostr(n, p);
}
int main ()
{
int num;
char str[33];
printf ("Enter a number: ");
scanf ("%d",&num);
itoa (num, str);
printf ("The number: %s\n", str);
return 0;
}
char * itoa(int n, char * p){ i = 0;//初始化下标为0 itostr(n, p); return 0; //加这句才能编译通过}
// 调用这个函数有一个假设,给定的参数p指向一个足够的保存结束数字的控件
// 根据整数的最大范围进行估算后加上符号位、结束字符(null)
//
// 如果调用时给出的参数p是0,则返回转换后的字符总数。
// 参数:
// int n 要转化的数字
// char *p 保存转换后数字的指针
// 返回:
// 字符串的长度(不包括结束字符)
//
int itoa(int n,char* p)
{
char* tmp;
int count;
int r;
char m;
char rp[32];//临时变量,保存转化后的数字字符串
int minus=0;
count=0;
rp[31]=0;//最后一个是null
tmp=rp+30;//指向倒数第一个数字
if(n<0)
{
minus=1;
n=-n;
}
r=n%10;//余数
n=n/10;//商
*tmp=nchars[r];
tmp--;
count++;
while(n!=0)
{
r=n%10;
n=n/10;
*tmp=(char)(r+0x30);
tmp--;
count++;
}
// 处理符号
if(minus!=0)
{
*tmp='-';
count++;
} else
tmp++;//指向第一个数字
if(p!=NULL)
{
// 如果给定了有效的参数 p,则复制结果
for(n=0;n<=count;n++)
{
p[n]=tmp[n];
}
}
// 返回转换后的字符总数,不包括结束字符(null)
return count;
}
else语言里面,应该为
{
itostr(n/10,p);
n %= 10;
p[i] = n + '0';
i++;
}
要不大佬再斟酌一下?