Пытаясь воссоздать функцию Атои
У меня проблема с функцией перекодирования 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;
}