qiu064987 发表于 2021-5-25 19:42:32

第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.

lei1996 发表于 2021-5-25 19:42:33

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

qiu064987 发表于 2021-5-25 21:47:17

追问一下,为什么这边要加* ---》char *myitoa(int num, char *str)里的*myitoa,是因为输出是字符串吗?

lei1996 发表于 2021-5-25 23:04:55

char *myitoa(int num, char *str)里的char* 表示返回为字符指针myitoa是函数名 (int num, char *str)的是参数并不是理解为*和myitoa为一体的*myitoa
返回类型为字符串可以返回首字符的地址指针
页: [1]
查看完整版本: 第29讲的动动手第0题