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 и прибавляем эту цифру к числу иначе выходим из цикла и возвращаем число. Поведение в случае ошибки нужно определить под свои нужды, в этой реализации возвращает ноль если строка не числовая с самого начала

→ Ссылка