胖胖的小阿涵 发表于 2021-2-4 14:57:01

谁能帮我解释一下这个课后题看不懂啊itoa那个

#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;
}

嘉岳呀 发表于 2021-2-4 14:57:51

哪个课后题?????

胖胖的小阿涵 发表于 2021-2-4 14:59:10

嘉岳呀 发表于 2021-2-4 14:57
哪个课后题?????

参数和指针自己写一个类似于itoa函数那个

sunrise085 发表于 2021-2-4 15:16:37

#include <stdio.h>

char *myitoa(int num, char *str);

char *myitoa(int num, char *str)//两个参数,第一个是待转换数据,第二个是char类型指针,用于存放转换结果
{
      int dec = 1;
      int i = 0;
      int temp;

      if (num < 0)//先判断num的正负,看是否需要在字符串前面写负号
      {
                str = '-';//num为负数,str为'-',str,i在前,先使用i,在对i自加一
                num = -num;//将nuam取反,变为正数
      }

      temp = num;//将临时变量赋值为num,后面需要判断num是多少位,但又要保持num不被改变,所以就定义了一个临时变量temp。

      while (temp > 9)//使用temp循环,判断num有多少位,num有多少位,dec结果就有多少位
      {
                dec *= 10;
                temp /= 10;
      }

      while (dec != 0)//循环,根据位数,从高位开始,逐位向str中添加
      {
                str = num / dec + '0';//获取当前位的数字,并转为数字对于的ASCII码值,然后添加到字符串中
                num = num % dec;//num去掉当前的最高位
                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;
}

jackz007 发表于 2021-2-4 15:20:34

#include <stdio.h>

char * myitoa(int num , char * str)
{
      int d , k , m                                                ;
      char c                                                       ;
      d = (num > 0) ? num : - num                                  ;
      for(m = 0 ; d ; d /= 10 , m ++) * (str + m) = '0' + (d % 10) ;
      if(num < 0) * (str + m ++) = '-'                           ;
      * (str + m) = '\0'                                           ;
      for(k = 0 ; k < m / 2 ; k ++) {
                c = * (str + k)                                    ;
                * (str + k) = * (str + m - 1 - k)                  ;
                * (str + m - 1 - k) = c                              ;
      }
      return str                                                   ;
}

main(void)
{
      char s                                                   ;
      printf("%s\n" , myitoa(-12345678 , s))                     ;
      printf("%s\n" , myitoa(987654321 , s))                     ;
}

风过无痕1989 发表于 2021-2-4 21:55:50

itoa 这个函数是将 int 型转换为字符型。itoa 将它分开来,就便于记忆了 i (int) to a (alphabet)
页: [1]
查看完整版本: 谁能帮我解释一下这个课后题看不懂啊itoa那个