鱼C论坛

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

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

[复制链接]
发表于 2021-5-25 19:42:32 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 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[10];
                if (num < 0)
                {
                                str[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[i] = dev;
                                i--; 
                }
                
                for (i = 0; i <= j; i++)
                {
                                *(str + i) = *(a + i) + '0';
                }                
                
                return str;
}

int main(void)
{
        char str[10];

              printf("%s\n", myitoa(520, str));
        printf("%s\n", myitoa(-1234, str));
        return 0;
}

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

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

结果很奇怪,结果是520w和01234.
最佳答案
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[10];
        if (num < 0)
        {
                str[i++] = '-';
                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[i] = 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[10];

        printf("%s\n", myitoa(520, str));
        printf("%s\n", myitoa(-1234, str));
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[10];
        if (num < 0)
        {
                str[i++] = '-';
                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[i] = 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[10];

        printf("%s\n", myitoa(520, str));
        printf("%s\n", myitoa(-1234, str));
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 15:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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