试图重新创建函数 atoi
Trying to recreate function atoi
我在重新编码函数 atoi 中遇到问题。这是代码 (只是函数 body):
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 循环。
与此同时,是的,我使用了 header
#include<ctype.h>
用于使用函数 int isdigit(int).
你的代码有两个问题,我希望我的评论能消除其中一个,这样你就可以找到另一个。首先,您总是使用相同的值调用 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;
}
我在重新编码函数 atoi 中遇到问题。这是代码 (只是函数 body):
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 循环。
与此同时,是的,我使用了 header
#include<ctype.h>
用于使用函数 int isdigit(int).
你的代码有两个问题,我希望我的评论能消除其中一个,这样你就可以找到另一个。首先,您总是使用相同的值调用 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;
}