Atoi реализация
Нужно реализовать функцию atoi, чтобы она конвертировала число с несколькими разрядами.
int atoi(string str) {
int x=0;
for (int i = 0; i < size(str); i++) {
x = int(str[i]) - int('0');
}
return x;
}
я сделал так, только мне оно будет переводить каждое число (я ввожу '125', а оно мне выведет 1, 2, а потом 5, т.е. отдельно) мне нужно чтобы вывелось 100, потом 20 и наконец 5 помогите пожалуйста
Ответы (1 шт):
Автор решения: Ildar
→ Ссылка
Возможная реализация:
#include <cctype>
int atoi(const char* str)
{
int number = 0;
int sign = 1;
if (*str == '+' || *str == '-') {
if (*str == '-') {
sign = -1;
}
++str;
}
while (std::isdigit(*str)) {
number = number * 10 + (*str - '0');
++str;
}
return number * sign;
}
Входная строка должная быть нуль-терминированной, алгоритм прост: проходимся по строке если очередной символ цифра то умножаем наше итоговое число на 10 и прибавляем эту цифру к числу иначе выходим из цикла и возвращаем число. Поведение в случае ошибки нужно определить под свои нужды, в этой реализации возвращает ноль если строка не числовая с самого начала