0

我在重新编码功能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)

4

1 回答 1

1

您的代码有两个问题,其中一个我希望我的评论能够消除,所以您可以找到另一个。首先,您始终isdigit使用相同的值调用,而不是字符串中的当前字符。这可以通过删除 . 周围的单引号来解决*s。其次,您实际上从未进行任何从字符到数字的转换。为此,需要一点关于 ascii 的知识(以及一些双重检查标准是否在您身边:如何在 C 中将 char 转换为整数?)。通过这两个更正,您的代码应该看起来像这样并且实际上可以工作:

int atoi2(const char *s) {
    int i, sum = 0;
    for (i = 0; isdigit(*s); s++) {
        sum = (sum * 10) + (*s - '0');
        i++;
    }
    return sum;
}
于 2015-12-21T15:50:56.250 回答