Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892

Посчитать сумму цифр в строке (исправить ошибку) + дописать код для суммы чисел

11.12.2018, 11:50. Показов 3789. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста дописать код: Нужно посчитать сумму чисел в строке. То есть введя : " 1945 year, 05, 09" должно выводить "1959" (1945+05+09)
#==
1)Здравствуйте, код выполняется некорректно, а именно считает сумму цифр первого числа. Как это исправить? В чём ошибка?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "pch.h"
#include <iostream>
#include <string>   //для strlen()
int main()
{
    char a[256]; //вводимая строка
    int S = 0;    //изначально сумма = 0
    std::cin >> a;
    for (int i = 0; i < strlen(a); i++) //Просматриваем каждый символ. Если цифра, то прибавляем соответствующее значение.
        switch (a[i]) {
        case '1': {S += 1; break; }
        case '2': {S += 2; break; }
        case '3': {S += 3; break; }
        case '4': {S += 4; break; }
        case '5': {S += 5; break; }
        case '6': {S += 6; break; }
        case '7': {S += 7; break; }
        case '8': {S += 8; break; }
        case '9': {S += 9; break; }
        }
    std::cout << S << "\n";   //выводим
    system("pause");
    return 0;
}
Миниатюры
Посчитать сумму цифр в строке (исправить ошибку) + дописать код для суммы чисел  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.12.2018, 11:50
Ответы с готовыми решениями:

Найти сумму цифр в строке (исправить код)
Я несколько написал, это все к чему я додумался!) #include &lt;iostream&gt; #include &lt;string.h&gt; const int n=100; using namespace std; ...

Посчитать количество слов в строке: исправить код
Помогите пож. поправить программу. Она должна считать кол-во слов в строке. (но считает не верно) Заранее огромное спасибо! .386 ...

Посчитать сумму цифр в строке
int sumchis(char*s) { int i = 0; int sum; char ch; while (s!='\0') { if(isdigit(s)) { ch = s; ...

12
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
11.12.2018, 11:55
Цитата Сообщение от triatri3 Посмотреть сообщение
Посчитать сумму цифр
Цитата Сообщение от triatri3 Посмотреть сообщение
посчитать сумму чисел
Так что посчитать нужно?
0
Нарушитель
10228 / 5658 / 1259
Регистрация: 12.03.2015
Сообщений: 26,227
11.12.2018, 12:01
Кликните здесь для просмотра всего текста

Ты индус по национальности? Скажи честно.
Цитата Сообщение от triatri3 Посмотреть сообщение
То есть введя : " 1945 year, 05, 09" должно выводить "1959" (1945+05+09)
Это не сумма цифр, а сумма ЧИСЕЛ.
Надо сначала выделить все числа, а потом просуммировать? Правильно, не?
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
11.12.2018, 12:14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string s="s ";
 string str=" 1945 year, 05, 09" ;
 char *p,t[80];
 int sum=0;
 
  s+=str;
  strtok(strcpy(t,s.c_str())," ,");
  do{
     p=strtok('\0'," ,");
      if(p)
       sum+=atoi(p);
     } while(p);
 
  cout<<sum<<"\n";
1
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
11.12.2018, 12:18
Лучший ответ Сообщение было отмечено triatri3 как решение

Решение

Сумма чисел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <sstream>
#include <string>
 
int main() {
 
    std::string str = "1945 year, 05, 09";
    std::istringstream iss(str);
    char ch;
 
    int value;
    int sum = 0.0;
 
    while (iss.get(ch)) {
 
        if (::isdigit(ch)) {
 
            iss.putback(ch);
            iss >> value;
            sum += value;
 
        }
 
    }
 
    std::cout << sum << '\n';
 
    system("PAUSE");
    return 0;
 
}
Сумма цифр:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <sstream>
#include <string>
 
int main() {
 
    std::string str = "1945 year, 05, 09";
    std::istringstream iss(str);
    char ch;
 
    int sum = 0.0;
 
    while (iss.get(ch)) {
 
        if (::isdigit(ch))
            sum += (ch - '0');
 
    }
 
    std::cout << sum << '\n';
 
    system("PAUSE");
    return 0;
 
}
1
Нарушитель
10228 / 5658 / 1259
Регистрация: 12.03.2015
Сообщений: 26,227
11.12.2018, 12:35
Вот так, штоль? Посмотри.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef long unsigned int QWORD;
 
QWORD foo(char* s)
{
  QWORD result = 0, x = 0;
 
  while (*s)
  {
    if (isdigit(*s)) x = 10 * x + *s - 0x30;
    else result += x, x = 0;
    s++;
  }
 
  return result + x;
}
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
11.12.2018, 14:39  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
Так что посчитать нужно?
Вообще нужно и то, и другое.
0
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
13.12.2018, 16:45  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
Сумма чисел:
Извините что вновь отвлекаю. Не могли бы Вы мне помочь вновь? ПОнравился Ваш вариант, но переделав его так, чтобы пользователь вводил данные у меня возникла следующая проблема: суммируютя числа лишь до проблема. Как это исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "pch.h"
#include <iostream>
#include <sstream>
int main()
{
    std::string str1;
    std::cout << "Enter you string" << '\n';
    std::cin >> str1;
    std::istringstream iss1(str1); //для разделения простой строки на ряд целых чисел
    char ch1;
    int value;
    int sum1 = 0.0;
    while (iss1.get(ch1)) {
        if (::isdigit(ch1)) { // проверяет яв-ся ли десятичной цифрой
            iss1.putback(ch1); //возвращает заданный символ назад во входной поток
            iss1 >> value;
            sum1 += value;
        }
    }
    std::cout <<"Sum1 = " << sum1 << '\n';
    std::istringstream iss(str1);
    char ch;
    int sum = 0.0;
    while (iss.get(ch)) {
        if (::isdigit(ch))
            sum += (ch - '0');
    }
    std::cout <<"Sum2 = " << sum << '\n';
    system("PAUSE");
    return 0;
}
Миниатюры
Посчитать сумму цифр в строке (исправить ошибку) + дописать код для суммы чисел  
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
13.12.2018, 16:56
Вместо
C++
1
std::cin >> text;
используйте
C++
1
std::getline(std::cin, text, '\n');
Добавлено через 3 минуты
std::cin считывает данные из потока до первого пробельного символа, либо до символа разрыва строки.
Функция std::getline() будет считывать данные из потока до указанного третьим параметром символа.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <sstream>
int main()
{
    std::string str1;
    std::cout << "Enter you string" << '\n';
    std::getline(std::cin, str1, '\n');
    std::istringstream iss1(str1); //для разделения простой строки на ряд целых чисел
    char ch1;
    int value;
    int sum1 = 0.0;
    while (iss1.get(ch1)) {
        if (::isdigit(ch1)) { // проверяет яв-ся ли десятичной цифрой
            iss1.putback(ch1); //возвращает заданный символ назад во входной поток
            iss1 >> value;
            sum1 += value;
        }
    }
    std::cout << "Sum1 = " << sum1 << '\n';
    std::istringstream iss(str1);
    char ch;
    int sum = 0.0;
    while (iss.get(ch)) {
        if (::isdigit(ch))
            sum += (ch - '0');
    }
    std::cout << "Sum2 = " << sum << '\n';
    system("PAUSE");
    return 0;
}
2
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
13.03.2019, 14:36  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
#include <iostream>
#include <sstream>
int main()
{
Извините, не подскажите почему Вы выбрали решать именно через потоки? И не могли бы Вы проверить, правильно ли я понимаю метод Вашего решения?
Сначало Вы записываете строку в поток, посимвольно извлекаете из потока и проверяете яв-ся ли десятичной цифрой. Если да, то возвращаете символ назад в поток (зачем? разве программа не будет вечно на этом символе зацикливаться?), сумируете с прошлым sum.
+мне непонятна реализация 25-ой строки. Зачем вычитать 'o'? Разве происходит не посимвольные операции?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.03.2019, 03:56
triatri3, подсчёт суммы цифр без строкового потока:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
 
int main()
{
    int i=0, sum=0;
    string s;
    cout << "String:\n";
    getline(cin, s);    
    
    while (s[i])
    {
    if (isdigit(s[i])) sum+=s[i] - 48; // или так sum+=s[i] - '0';
    i++;
    }
    
    cout << "sum=" << sum << "\n";
system("pause");
return 0;
}
Цитата Сообщение от triatri3 Посмотреть сообщение
Зачем вычитать 'o'?
в строке не цифры, а символы. 48 это код символа ноль (см.таблицу ASCII), 49 это код символа единица и т.д., поэтому
для работы с цифрами нужно от каждого символа цифры отнимать 48 (или символ ноль '0')
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
14.03.2019, 04:14
Цитата Сообщение от triatri3 Посмотреть сообщение
разве программа не будет вечно на этом символе зацикливаться?
Это проверка на начало числа, когда мы нашли символ: цыфру, прочитать число типа int

triatri3, у Yetty решение неверное, он суммирует цыфры а не числа.
0
14.03.2019, 10:16

Не по теме:

Цитата Сообщение от outoftime Посмотреть сообщение
Yetty решение неверное, он суммирует цыфры а не числа.
outoftime, читайте тему, потом пишите:
Цитата Сообщение от triatri3 Посмотреть сообщение
Посчитать сумму цифр в строке
Цитата Сообщение от triatri3 Посмотреть сообщение
посчитать сумму чисел
Цитата Сообщение от Nishen Посмотреть сообщение
Так что посчитать нужно?
Цитата Сообщение от triatri3 Посмотреть сообщение
нужно и то, и другое.
Цитата Сообщение от Yetty Посмотреть сообщение
подсчёт суммы цифр без строкового потока:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2019, 10:16
Помогаю со студенческими работами здесь

Посчитать сумму цифр в строке.
Надо написать прогу, которая бы считала сумму цифр в строке. Между цифрами может стоять несколько пробелов. Цифры могут быть вещественные и...

Посчитать сумму цифр, встречающихся в строке
Посчитать сумму цифр, встречающихся в строке.

Не могу исправить ошибку (ввести с клавиатуры две матрици и посчитать их сумму)
Program MATRIX; Uses CRT; const n=3; VAR i, i2, i3 : integer; j, j2, j3 : integer; a,b,c : array of real; begin WriteLn...

Посчитать сумму членов арифметической прогрессии (исправить код)
не столько даже написать, а сколько изменить. Есть прога но её надо переписать чтоб она считала сумму членов арифметической прогрессии,...

Дана последовательность чисел. Посчитать сумму цифр десятичной записи всех отрицательных чисел
Дана последовательность чисел. Посчитать сумму цифр десятичной записи всех отрицательных чисел. как это сделать циклом?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru