试图重新创建函数 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;
}