Добавление всех сумм строки - PullRequest
1 голос
/ 05 октября 2019

Я хочу получить сумму каждого символа строки (например, «1300321» вернет 10) в функции get_line_sum. Однако, похоже, моя сумма не совпадает с тем, что я предполагаю получить.

#include <iostream>
#include <string>
int get_line_sum(std::string x) {
    int total = 0;
    for (char &c : x) total += c;
    return total;
}
int main() {
    std::cout << get_line_sum("1300321") << std::endl;
}
c:    1   total:   0
c:    3   total:   49
c:    0   total:   100
c:    0   total:   148
c:    3   total:   196
c:    2   total:   247
c:    1   total:   297
346

Вывод 346 вместо 10. Я напечатал каждый символ и сумму, чтобы было легче увидеть, чтопродолжается.

Ответы [ 2 ]

3 голосов
/ 05 октября 2019

Вы суммируете коды символов, а не буквенные цифры. См. Таблицу ASCII .

Код ASCII для:

  • '1' равен 49
  • '3' равен 51
  • '0' равен 48
  • '2' равно 50

Таким образом, вы получаете 49 + 51 + 48 + 48 + 51 + 50 + 49, что составляет 346.

2 голосов
/ 05 октября 2019

Обход строки, посимвольный и преобразование в целое число путем вычитания '0' из каждого символа.

int main(){

    string n = "1300321";
    int sum = 0;
    for(const auto c : n)
    {
        sum += (c - '0');
        cout<<"sum: "<<sum<<"\n";
    }
    return 0;
}
...