|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:0. 你应该听说过 itoa 函数(函数文档 -> 传送门),它的作用是将一个整数转换成字符串形式存储。现在要求我们自己来实现一个类似功能的函数 myitoa(int num, char *str),该函数的第一个参数是待转换的整型变量,第二参数传入一个字符指针,用于存放转换后的字符串
答案代码如下:
#include <stdio.h>
char *myitoa(int num, char *str);
char *myitoa(int num, char *str)
{
int dec = 1;
int i = 0;
int temp;
if (num < 0)
{
str[i++] = '-';
num = -num;
}
temp = num;
while (temp > 9)
{
dec *= 10;
temp /= 10;
}
while (dec != 0)
{
str[i++] = num / dec + '0';
num = num % dec;
dec /= 10;
}
str[i] = '\0';
return str;
}
int main(void)
{
char str[10];
printf("%s\n", myitoa(520, str));
printf("%s\n", myitoa(-1234, str));
return 0;
}
能否详细解释一下函数体内每一行的功能作用呢?谢谢
拿-1234为例
因为-1234<0,所以进入条件语句if,str[i++]=str[1]=‘-’(这里的'-'已经是char型了),temp=num=-num=1234(转换完符号后,继续转换数字,这里的1234还是int类型);
然后进入第一个while循环:
第一次循环:temp=1234>9;dec=10;temp=123;
第二次循环:temp=123>9;dec=100;temp=12;
第三次循环:temp=12>9;dec=1000;temp=1;
(因为整型是十进制逢十进1,可以理解为不论是在哪个位上从0-9就是一个周期,所以循环条件是temp>9;循环语句是:dec*=10,temp/=10,这里的dec计算是为了在第二个循环中方便将十进制的每一位数字逐步转换成char型字符“1 2 3 4 5 6 7 8 9 0”,temp是为了结束循环)
再之后进入第二个循环:
第一次:dec!=0;str[2]=1234/1000+‘0'=(1+48)(因为int占四个byte而char占1个byte,所以“=”右边进行十进制运算,这里是十进制相加得49,又因为str是char型指针,最后str[2]存储的是char型的1);
num=1234%1000=234;dec=100
第二次:dec!=0;str[3]=234/100+‘0'=(2+48)(这里是十进制相加得50即为char型的2);
num=234%100=34;dec=10
第三次:dec!=0;str[4]=34/10+‘0'=(3+48)(这里是十进制相加得51即为char型的3);
num=34%10=4;dec=1
第四次:dec!=0;str[5]=4/1+‘0'=(4+48)(这里是十进制相加得52即为char型的4);
num=4%1=0;dec=0
循环结束
str[i]=str[6]='\0';(这里是因为一个字符串的存储以'\0'结束)
最后的return str 最后返回char型指针str
|
|