乔宽 发表于 2019-7-9 15:29:42

参数和指针,课后作业

你应该听说过 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;
}其中这段代码: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';
看了半天,看不懂,就想到是不是转化为十进制,表示出。

百世经纶 发表于 2019-7-9 16:15:49

查ASICII码表,就明白了,扩展各类型数据是怎么存的{:10_256:}

乔宽 发表于 2019-7-9 16:24:49

百世经纶 发表于 2019-7-9 16:15
查ASICII码表,就明白了,扩展各类型数据是怎么存的

看了,还是不太明白,请指教一下。

百世经纶 发表于 2019-7-9 17:21:42

本帖最后由 百世经纶 于 2019-7-9 17:37 编辑

乔宽 发表于 2019-7-9 16:24

百世经纶 发表于 2019-7-9 17:58:56

乔宽 发表于 2019-7-9 16:24
看了,还是不太明白,请指教一下。

1 + ‘0’ 就是字符 ‘1’ 还以为要加48呢 (不用ASICII表)
2 + ‘0’ 是 ‘2’

都是取最高位(521/100=5)转为字符(char a = 5+‘0’),再取次高位转字符,

521%100=21   取2转字符,循环就是了


心驰神往 发表于 2020-11-3 16:05:04

{:10_277:}
页: [1]
查看完整版本: 参数和指针,课后作业