Неверное преобразование из char в const * char, что не так с кодом? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь написать функцию, которая принимает один параметр типа int и возвращает сумму его цифр. Например, digital_root (123) вернет 1 + 2 + 3, что равно 6. А внутри цикла for я не могупреобразовать отдельный символ в целое число.

Следует учесть, что я использовал функции atoi () и stoi (). Что не так с кодом?

int digital_root(int x)
{
    int t = 0;
    string str = to_string(x);
    for(char& c : str){
        t += atoi(c);
    }
    return t;
}

Я ожидаю символыпреобразовать в целое число успешно. Как я могу это сделать?

1 Ответ

1 голос
/ 20 июня 2019

Посмотрите на std::atoi, его аргумент имеет тип const char*, но вы передаете один char.Невозможно преобразовать char в const char*, на что жалуется компилятор.

Вместо этого вам нужно преобразовать char в целое число, выполнив некоторую математику ASCII:

t += static_cast<int>(c)  - '0';

Но учтите, что, хотя это работает, есть лучшее решение для этой задачи.Он не требует преобразования в строку, но вместо этого полагается исключительно на целочисленное деление, многократно используя % 10.

...