Пытаясь воссоздать функцию Атои

У меня проблема с функцией перекодирования 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. Похоже, он проходит цикл.

Между тем, да, я использовал заголовок

#include<ctype.h>

для использования функции int isdigit (int).

1 ответ

Решение

В вашем коде есть две проблемы, одна из которых, я надеялся, мой комментарий устранит, и вы сможете найти другую. Прежде всего, вы всегда звоните isdigit с тем же значением вместо текущего символа в строке. Это исправлено удалением одинарных кавычек *s, Во-вторых, вы никогда не делаете никакого преобразования персонажа в число. Для этого необходимо немного знаний об ascii (и некоторая двойная проверка, если стандарт на вашей стороне: как преобразовать char в целое число в C?). С этими двумя исправлениями ваш код должен выглядеть следующим образом и фактически работать:

int atoi2(const char *s) {
    int i, sum = 0;
    for (i = 0; isdigit(*s); s++) {
        sum = (sum * 10) + (*s - '0');
        i++;
    }
    return sum;
}
Другие вопросы по тегам