第29讲的动动手第0题
本帖最后由 qiu064987 于 2021-5-25 19:53 编辑0. 你应该听说过 itoa 函数(函数文档 -> 传送门),它的作用是将一个整数转换成字符串形式存储。现在要求我们自己来实现一个类似功能的函数 myitoa(int num, char *str),该函数的第一个参数是待转换的整型变量,第二参数传入一个字符指针,用于存放转换后的字符串。
#include<stdio.h>
char *myitoa(int num, char *str)
{
int i= 0, s, dev, j, l;
int a;
if (num < 0)
{
str = '-';
num = -num;
}
s= num;
while (num != 0 && num / 10)
{
num = num / 10;
i++;
}
j = i;
while(i >= 0)
{
dev = s % 10;
s = s / 10;
a = dev;
i--;
}
for (i = 0; i <= j; i++)
{
*(str + i) = *(a + i) + '0';
}
return str;
}
int main(void)
{
char str;
printf("%s\n", myitoa(520, str));
printf("%s\n", myitoa(-1234, str));
return 0;
}
自己想的,哪位大佬帮我改改错,谢谢。
不要重新自己写的,这样还不如看小甲鱼老师的。
结果很奇怪,结果是520w和01234. #include<stdio.h>
char *myitoa(int num, char *str)
{
int i = 0, s, dev, j, l;
int flag = i;
int a;
if (num < 0)
{
str = '-';
flag = i;
num = -num;
}
s = num;
while (num != 0 && num / 10)
{
num = num / 10;
i++;
}
j = i;
while (i >= 0)
{
dev = s % 10;
s = s / 10;
a = dev;
i--;
}
for (i = 0; i <= j; i++)
{
if (flag) //正负需要插入的位置不同
{
*(str + i + 1) = *(a + i + 1) + '0';
}
else
{
*(str + i) = *(a + i) + '0';
}
}
*(str + i) = '\0';//添加字符串结尾标志\0
return str;
}
int main(void)
{
char str;
printf("%s\n", myitoa(520, str));
printf("%s\n", myitoa(-1234, str));
return 0;
} 追问一下,为什么这边要加* ---》char *myitoa(int num, char *str)里的*myitoa,是因为输出是字符串吗?
char *myitoa(int num, char *str)里的char* 表示返回为字符指针myitoa是函数名 (int num, char *str)的是参数并不是理解为*和myitoa为一体的*myitoa
返回类型为字符串可以返回首字符的地址指针
页:
[1]