Преобразование строки C в отдельные целые числа - PullRequest
0 голосов
/ 26 апреля 2018

В этом упражнении вводится символьный массив, а затем добавляются цифры числа.

#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

int main() {

    //Input a series of single digit numbers
    char numbers[] = "a";

    cout << "Input a series of single digit numbers." << endl;
    cin >> numbers;

    //convert the character array into a int array.
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += atoi(numbers[i]);
    }
    cout << "Sum of digits: " << sum; 

    return 0;
}

Функция atoi, по моему пониманию, одновременно конвертирует только целые массивы символов (строки C), и я полагаю, что не могу пройтись по массиву, но, похоже, это должно сработать. Мой другой вариант состоял в том, чтобы преобразовать Cstring в одно большое целое число, а затем использовать длину строки, чтобы пройти и вычислить цифры в каждой позиции, но это, вероятно, более неэффективно, чем я мог бы это сделать.

Что бы вы использовали, чтобы найти однозначные числа в виде целых чисел для массива символов?

1 Ответ

0 голосов
/ 26 апреля 2018
char numbers[] = "a";

Это создает массив из 2 char элементов. Этого недостаточно для чего-либо разумного. Вместо этого используйте std::string.

cin >> numbers;

Лучше использовать std::getline из заголовка <string>.

sum += atoi(numbers[i]);

atoi принимает строку в качестве аргумента, а не один char. Требуется сумма цифр, а не сумма числовых значений, которые вы получаете, применяя atoi ко всем правильным подстрокам спецификации.

Для цифры ch соответствующее значение цифры - ch - '0'.

...