S1E29 关于while里面
本帖最后由 Justin1 于 2020-5-6 18:44 编辑这是这个题目
你应该听说过 itoa 函数(函数文档 -> 传送门),它的作用是将一个整数转换成字符串形式存储。现在要求我们自己来实现一个类似功能的函数 myitoa(int num, char *str),该函数的第一个参数是待转换的整型变量,第二参数传入一个字符指针,用于存放转换后的字符串
我自己写了一套代码,模仿甲鱼的,感觉实际上意思差不多,但是我的第二个while循环出了问题。
小甲鱼的代码这两句句的
+'0'不大理解str = num / (int)(pow(10,len)) + '0';
str = '\0';
这个是我写的】
/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdio.h>
#include <math.h>
char myitoa(int num, char *str);
char myitoa(int num, char *str)
{
int i = 0;
int j = 0;
int len;
int temp;
if(num < 0)
{
str = '-';
num = -num;
}
do
{
temp = (int) pow(10,++j);
}
while(temp < num);
len = j -1;
while( pow(10,len) != 1)
{
str = num / (int)(pow(10,len)) + '0';
num = num % (int)(pow(10,len));
len = len -1;
if( len == 0)
{
str = num;
}
}
str = '\0';
return str;
}
int main()
{
char str;
printf("%s\n",myitoa(520, str));
//printf("%s\n",myitoa(-1234, str));
return 0;
}
这个是甲鱼的
#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;
} if( len == 0)
{
str = num + '0'; //这行添加 + '0'
}
+'0'的作用是将数字转换为对应的ASCII码,比如某一位的数字是5,将这个整数的5加上'0'的ASCII码48得到53,就是'5'的ASCII码。
str[ i ] = '\0';是给得到的字符串添加一个结束标志。
另外,你的 char myitoa(int num, char *str),返回值应该是char *吧
本帖最后由 Neverturnback 于 2020-5-7 06:22 编辑
1、关于+‘0’可以看看ascii码表就知道了,这个作用是快捷的将0~9数字转换成对应字母。
2、(int)(pow(10,len))其中pow()是一个系统函数,可以百度一下看看这个函数的作用,然后前面的(int)是因为pow的出来的数据不是一个int型,所以将pow返回的数据强制转换成int型,可以百度或者CSDN搜搜关于强制转换这方面的知识和注意点
3、num/pow(10,len),首先pow(10,len)返回的数肯定是1,10,100,1000。。。这样的数,所以用num除以这些数能得到什么?假如123/100 = ?(注意这里的除法和两个除数的数据类型,这也是为什么要把pow的数据类型强转为int型的原因,不会的话,可以百度这方面的知识)
4、str = num / (int)(pow(10,len)) + '0';中i++这个理解是什么意思了么?是先计算,然后i+1,还是先将i+1再计算?这里面的len是什么作用?搞懂后结合前后你就知道这一整句是什么意思了
5、str = '\0';这里面 i 的值是多少?如果不知道,查查关于变量作用域方面的知识,至于后面为什么赋值‘\0’查查关于字符串的知识,就能弄懂了
6、先自己去研究一下,实在弄不懂的话再来问,如果搞懂了,把自己的思路附在自己的问题下面,方便后来的鱼友 Neverturnback 发表于 2020-5-7 06:20
1、关于+‘0’可以看看ascii码表就知道了,这个作用是快捷的将0~9数字转换成对应字母。
2、(int)(pow(10,l ...
谢谢回答了,我找到了我的问题。我的问题表述没写清楚,造成了一定误会,234的代码是我自己写的 superbe 发表于 2020-5-6 18:43
if( len == 0)
{
str = num + '0'; //这行添加 + '0'
这里我又有点懵了, 为什么定义函数的时候 是 char *myitoa(int, char *str)呢? 对于*myitoa不大理解。
另外对于这个语句
str = num / (int)(pow(10,len)) + '0';
我不知道该如何看每一次str的值,我的理解是这样的,但是打印结果为NULL
printf("str: %c\n", str);
页:
[1]