将数字转换成数字字符串,有一行语句不是很明白
本帖最后由 猪猪虾 于 2020-11-6 22:42 编辑那两个while循环是在干嘛,数字还能和字符串相加.....
//*************************************
//你应该听说过 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 = '-'; //如果是负数,转换后的字符串还是要给一个负号
num = -num; //把负数转换成正数
}
temp = num;
while (temp > 9)
{
dec *= 10;
temp /= 10;
}
while (dec != 0)
{
str = num / dec + '0';
num = num % dec;
dec /= 10;
}
str = '\0';
return str;
}
int main(void)
{
char str;
printf("%s\n", myitoa(520, str));
printf("%s\n", myitoa(-1234, str));
return 0;
} 本帖最后由 1471590985 于 2020-11-6 23:27 编辑
随便给个数算一下就明朗了,看看注释吧,+'0'就是将一个数字变为对应的字符,
你看看ascii码表48代表'0',那么如果我是5,加上48也就是加上'0'这两个是一样的,得到的结果就是数字53也就是字符'5'
temp = num; //temp = num = 520
while (temp > 9)
{
dec *= 10;
temp /= 10;
}
//dec = 100
//temp = 5
while (dec != 0)
{
str = num / dec + '0'; //num = 520, dec = 100, num / dec = 5, + '0'就是将数字5变为字符5 *** num/dec=20/10=2 ***num/dec=0/1=1
num = num % dec; //num = 520 % 500 = 20 *** num=20%10=0 *** ...
dec /= 10; //dec = 10 *** dec=1 ***...
}
str = '\0';
本帖最后由 jackz007 于 2020-11-7 00:53 编辑
//*************************************
//你应该听说过 itoa 函数(函数文档 -> 传送门),它的作用是将一个整数转换成字符串形式存储。
//现在要求我们自己来实现一个类似功能的函数 myitoa(int num, char *str),
//该函数的第一个参数是待转换的整型变量,第二参数传入一个字符指针,用于存放转换后的字符串
#include <stdio.h>
char * myitoa(int num , char * str)
{
int d , e , i , k = 0 ;
d = (num > 0) ? num : - num ;
if(num < 0) * (str + k ++) = '-' ;
for(e = d , i = 1 ; e >= 10 ; i *= 10 , e /= 10) ;
for(; i ; k ++ , d %= i , i /= 10) * (str + k) = '0' + d / i ;
* (str + k) = '\0' ;
return str ;
}
main(void)
{
char s ;
printf("%s\n" , myitoa(-12345678 , s)) ;
printf("%s\n" , myitoa(987654321 , s)) ;
}
编译、运行实况:
D:\00.Excise\C>g++ -o itoa itoa.c
D:\00.Excise\C>itoa
-12345678
987654321
D:\00.Excise\C>
页:
[1]