我在重新编码功能 atoi 方面遇到了问题。这是代码(只是函数体):
int atoi2(const char *s) {
int i, sum = 0;
for (i = 0; isdigit('*s') == 1; s++) {
sum = (sum * 10) + *s;
i++;
}
return sum;
}
每当我在参数中调用函数作为字符串(如“12345”)时,我只得到 0 。好像它通过了for循环。
同时,是的,我使用了标题
#include<ctype.h>
使用函数 int isdigit(int)。
答案 0 :(得分:1)
你的代码有两个问题,其中一个我希望我的评论会消除,所以你可以找到另一个。首先,您始终使用相同的值调用isdigit
,而不是字符串中的当前字符。通过删除*s
周围的单引号来解决此问题。其次,你从来没有真正做过从角色到数字的任何转换。为此,需要一些关于ascii的知识(如果标准在你身边,可以进行一些双重检查:How to convert char to integer in C?)。通过这两个更正,您的代码应该看起来像这样并且实际工作:
int atoi2(const char *s) {
int i, sum = 0;
for (i = 0; isdigit(*s); s++) {
sum = (sum * 10) + (*s - '0');
i++;
}
return sum;
}