鱼C论坛

 找回密码
 立即注册
查看: 2798|回复: 3

[已解决]第29讲的动动手第0题

[复制链接]
发表于 2021-5-25 19:42:32 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 qiu064987 于 2021-5-25 19:53 编辑

0. 你应该听说过 itoa 函数(函数文档 -> 传送门),它的作用是将一个整数转换成字符串形式存储。现在要求我们自己来实现一个类似功能的函数 myitoa(int num, char *str),该函数的第一个参数是待转换的整型变量,第二参数传入一个字符指针,用于存放转换后的字符串。

  1. #include<stdio.h>

  2. char *myitoa(int num, char *str)
  3. {
  4.                 int i= 0, s, dev, j, l;
  5.                 int a[10];
  6.                 if (num < 0)
  7.                 {
  8.                                 str[i++] = '-';
  9.                                 num = -num;
  10.                 }
  11.                 s= num;
  12.                
  13.                
  14.                 while (num != 0 && num / 10)
  15.                 {       
  16.                                 num = num / 10;
  17.                                 i++;
  18.                 }
  19.                 j = i;

  20.                 while(i >= 0)
  21.                 {
  22.                                 dev = s % 10;
  23.                                 s = s / 10;
  24.                                 a[i] = dev;
  25.                                 i--;
  26.                 }
  27.                
  28.                 for (i = 0; i <= j; i++)
  29.                 {
  30.                                 *(str + i) = *(a + i) + '0';
  31.                 }               
  32.                
  33.                 return str;
  34. }

  35. int main(void)
  36. {
  37.         char str[10];

  38.               printf("%s\n", myitoa(520, str));
  39.         printf("%s\n", myitoa(-1234, str));
  40.         return 0;
  41. }
复制代码


自己想的,哪位大佬帮我改改错,谢谢。

不要重新自己写的,这样还不如看小甲鱼老师的。

结果很奇怪,结果是520w和01234.
最佳答案
2021-5-25 19:42:33
  1. #include<stdio.h>

  2. char *myitoa(int num, char *str)
  3. {
  4.         int i = 0, s, dev, j, l;
  5.         int flag = i;
  6.         int a[10];
  7.         if (num < 0)
  8.         {
  9.                 str[i++] = '-';
  10.                 flag = i;
  11.                 num = -num;
  12.         }
  13.         s = num;


  14.         while (num != 0 && num / 10)
  15.         {
  16.                 num = num / 10;
  17.                 i++;
  18.         }
  19.         j = i;

  20.         while (i >= 0)
  21.         {
  22.                 dev = s % 10;
  23.                 s = s / 10;
  24.                 a[i] = dev;
  25.                 i--;
  26.         }

  27.         for (i = 0; i <= j; i++)
  28.         {
  29.                 if (flag)   //正负需要插入的位置不同
  30.                 {
  31.                         *(str + i + 1) = *(a + i + 1) + '0';
  32.                 }
  33.                 else
  34.                 {
  35.                         *(str + i) = *(a + i) + '0';
  36.                 }
  37.         }
  38.         *(str + i) = '\0';  //添加字符串结尾标志\0

  39.         return str;
  40. }

  41. int main(void)
  42. {
  43.         char str[10];

  44.         printf("%s\n", myitoa(520, str));
  45.         printf("%s\n", myitoa(-1234, str));
  46.         return 0;
  47. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-25 19:42:33 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>

  2. char *myitoa(int num, char *str)
  3. {
  4.         int i = 0, s, dev, j, l;
  5.         int flag = i;
  6.         int a[10];
  7.         if (num < 0)
  8.         {
  9.                 str[i++] = '-';
  10.                 flag = i;
  11.                 num = -num;
  12.         }
  13.         s = num;


  14.         while (num != 0 && num / 10)
  15.         {
  16.                 num = num / 10;
  17.                 i++;
  18.         }
  19.         j = i;

  20.         while (i >= 0)
  21.         {
  22.                 dev = s % 10;
  23.                 s = s / 10;
  24.                 a[i] = dev;
  25.                 i--;
  26.         }

  27.         for (i = 0; i <= j; i++)
  28.         {
  29.                 if (flag)   //正负需要插入的位置不同
  30.                 {
  31.                         *(str + i + 1) = *(a + i + 1) + '0';
  32.                 }
  33.                 else
  34.                 {
  35.                         *(str + i) = *(a + i) + '0';
  36.                 }
  37.         }
  38.         *(str + i) = '\0';  //添加字符串结尾标志\0

  39.         return str;
  40. }

  41. int main(void)
  42. {
  43.         char str[10];

  44.         printf("%s\n", myitoa(520, str));
  45.         printf("%s\n", myitoa(-1234, str));
  46.         return 0;
  47. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-25 21:47:17 | 显示全部楼层
追问一下,为什么这边要加* ---》char *myitoa(int num, char *str)里的*myitoa,是因为输出是字符串吗?

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-25 23:04:55 | 显示全部楼层
char *myitoa(int num, char *str)里的char* 表示返回为字符指针  myitoa是函数名 (int num, char *str)的是参数  并不是理解为*和myitoa为一体的*myitoa
返回类型为字符串可以返回首字符的地址指针
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 08:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表