是佳佳呀 发表于 2020-7-10 19:00:45

S1E29参数和指针的题


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 = '-';
                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;
}
这道题看了答案还是不懂,求大佬注释一下

bin554385863 发表于 2020-7-10 19:00:46

本帖最后由 bin554385863 于 2020-7-11 08:40 编辑

#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;
      //如果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;
}

liuzhengyuan 发表于 2020-7-10 20:11:17

那里不懂?

巴巴鲁 发表于 2020-7-10 22:06:48

你可以随便找几个值,模仿程序自己一步一步算一遍,自己说不定就悟了
页: [1]
查看完整版本: S1E29参数和指针的题