Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/76: Рейтинг темы: голосов - 76, средняя оценка - 4.76
4 / 4 / 1
Регистрация: 23.01.2013
Сообщений: 45

Найти сумму чисел в строке, введённой пользователем

07.02.2014, 09:03. Показов 14518. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я пытаюсь решить некоторые задачи по C++, но не все получаются. Одна из задач - найти сумму чисел в строке, введённой пользователем.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
 
double sum;
double x;
int c1,c2;
int i;
  char str[500];
int main(int argc, char *argv[])
{
  
    setlocale(LC_ALL, "rus");
    cout <<"Ââåäèòå ñòðîêó ÷èñåë:";
    sum=0;
    cin >> str;
    c1 =0;
    sum =0;
    for(int i=0;i <strlen(str);i++)
    {
    if(str[i] ==',' || str[i] =='\0')
    {
        c2 = i-1;
        x=0;
        for(int j=c1; j<=c2;j++)
        {switch(str[j])
        {
        case 1: x=1 ;
              break;
        case 2: x=2 ;
             break;
        case 3: x=3;
             break;
        case 4: x=4;
             break;
        case 5: x=5 ;
             break;
        case 6: x=6;
             break;
        case 7: x=7 ;
             break;
        case 8: x=8 ;
             break;
        case 9: x=9 ;
             break;
        case 0: x=0 ;
             break;
             default:break;
             }
             x=x* pow(10,(double)c2-j+1); 
             sum+=x;
             c1 = i+1;
             }
        
    
                       }
                       }
                       cout << sum << endl;
    system("PAUSE");
    return 0;
}
Мой Компилятор dev-c++.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2014, 09:03
Ответы с готовыми решениями:

Реализовать ввод строки с консоли пользователем и найти количество заданного символа в введённой строке
Ввести предложение и подсчитать сколько букв 'н' в нем.

В введённой пользователем строке подсчитать количество цифр
Вводится строка. Подсчитать в ней количество цифр Одна программа решает задачу с использованием строк, представленных как массивы...

Посчитать количество вхождений заданного символа в строке, введённой пользователем
Дано : Пользователь вводит строку символов и искомый символ, посчитать сколько раз он встречается в строке. (С++) Вопрос: Как сделать,...

16
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
07.02.2014, 09:26
albert!,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
#include<string>
#include<sstream>
int main()
{
    std::string str;
    std::getline(std::cin,str);
    std::stringstream ss(str);
    double sum(0);
    for(double number;ss>>number;sum+=number);
    std::cout<<"sum: "<<sum;
    return 0;
}
1
4 / 4 / 1
Регистрация: 23.01.2013
Сообщений: 45
07.02.2014, 10:05  [ТС]
cooller_94.
Спасибо за решение, но я в нём не очень разобрался.
А можно как-нибудь изменить мой код? Мне хочется узнать, где в нём ошибки.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.02.2014, 10:32
albert!, попробуйте так:
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 "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
 
 
int main(int argc, char *argv[])
{
  
    setlocale(LC_ALL, "rus");
    double sum=0;
    int c1=0;
    char str[500];
    cout <<"Введите строку чисел:"<<endl;
    cin >> str;
    sum=0;
    for(int i=0;i<strlen(str);i++)
    {
        if((int)str[i]>=48 && (int)str[i]<=57)
        sum=sum+(int)str[i]-48;
    }    
    cout << sum << endl;
    system("pause");
    return 0;
}
1
4 / 4 / 1
Регистрация: 23.01.2013
Сообщений: 45
07.02.2014, 10:50  [ТС]
Нет, ваш способ работает только для цифр, а не для чисел. То есть если ввести 12,34, то программа выведет в качестве ответа число 10, так как 1+2+3+4 = 10. А мне нужно найти именно сумму чисел, а не цифр.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
07.02.2014, 11:28
Вам нужно просуммировать числа,вводимые в строку через запятую.Так бы сразу и написали

Добавлено через 32 минуты
Пробуйте так:

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
32
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
 
 
int main(int argc, char *argv[])
{
  
    setlocale(LC_ALL, "rus");
    double sum=0;
    int c1=0,j,var,i,point=0;
    char str[500];
    cout <<"Введите строку чисел:"<<endl;
    cin >> str;
    sum=0;
    for(i=0;i<strlen(str);i++)
    {
        if(str[i]==',')
        {
        for(var=i,j=0;var!=(point-1);j++,var--)
        {
            if((int)str[var]>=48 && (int)str[var]<=57)
            sum=sum+((int)str[var]-48)*pow(10,j-1);
        }
        point=i;
        }
    }    
    cout << sum << endl;
    system("pause");
    return 0;
}
P.S Учитывал символом разделителем только запятую,проверку на пробел и окончание строки сделайте сами.
0
Mobile Software Engineer
Эксперт С++
 Аватар для Ev[G]eN
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
07.02.2014, 11:53
Лучший ответ Сообщение было отмечено Ev[G]eN как решение

Решение

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
#include <iostream>
#include <cstring>
#include <cctype>
 
int main()
{
    const char *delimeters = ",. ";
    const size_t maximalStringLength = 256;
 
    char string[maximalStringLength];
    std::cout << "Input the string: ";
    gets(string);
 
    int numbersSum = 0;
    char *currentLexem = strtok(string, delimeters);
    while (currentLexem) {
        size_t digitsCounter = 0;
        for (size_t i = 0; i < strlen(currentLexem); i++) {
            digitsCounter += isdigit(currentLexem[i]) ? 1 : 0;
        }
        numbersSum += (digitsCounter == strlen(currentLexem)) ? atoi(currentLexem) : 0;
        currentLexem = strtok(nullptr, delimeters);
    }
    std::cout << "Sum of numbers in the string: " << numbersSum << std::endl;
    currentLexem = nullptr;
 
    std::system("pause");
    return 0;
}
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
07.02.2014, 14:31
Ev[G]eN, может всё-таки strtok(NULL, delim) вместо nullptr!?
0
Mobile Software Engineer
Эксперт С++
 Аватар для Ev[G]eN
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
07.02.2014, 14:36
Kuzia domovenok, я дико извиняюсь, а в чем разница?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
07.02.2014, 15:38
Ev[G]eN, в том, что из-за одного слова, не вносящего никакой разницы в код, резко ограничивается количество возможностей "как скомпилировать программу"
ради кучи кода с полезными ништяками на новых шаблонах и.т.п. я, пожалуй, переустановлю ИДЕ. Ради строчки, в которой можно заменить одно слово НЕТ!
0
07.02.2014, 15:48

Не по теме:

Kuzia domovenok, почему-то меня твой аргумент не впечатлил..скоро выйдет стандарт С++14, а у тебя до сих пор компилятор, который не знает что такое nullptr и я должен об этом думать когда пишу код?
ЗЫ. Ошибка ясно дает понять, что компилятору не нравится и интуитивно можно догадаться, что nullptr стоит поменять на 0 или NULL

0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
07.02.2014, 15:56
Ev[G]eN, чё за фигня менять стандарты раз в три года? За три года универ не закончишь! За три года крупный проект не напишешь! Ты представляешь себе писать какой нибудь CAD или игровой движок 3 года, а потом переписывать столько же под новый стандарт?
0
Mobile Software Engineer
Эксперт С++
 Аватар для Ev[G]eN
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
07.02.2014, 16:00
Kuzia domovenok, жизнь не стоит на месте
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
07.02.2014, 16:13
Ev[G]eN, в том же python, на сколько я знаю, таких проблем нет. Там, к примеру, вторая и третья версии несовместимы и фактически разные языки!

Добавлено через 13 минут
Ev[G]eN, стандарт это как раз то, чему хорошо бы постоять на месте. Всё на свете не выучишь. Потому, Для всяких доп. Возможностей у языка есть библиотеки. Их можно обновлять хоть каждый день те, кто заинтересован выучит, другой найдёт другие.
Но стандарт мало того, что врезает в ядро языка фичи, которые должны быть в библиотеках, он нагружает язык необходимостью поддержки старых и новых фич, превращает язык в сверхмультипарадигменного монстра, который заставляет программиста помнить несколько областей одновременно!
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
07.02.2014, 17:27
albert!,
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 <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main()
{
    string S,t;  //Исходная строка и временная строка
    getline(cin,S);
    int sum=0;
 
   for (int i=0;i<=S.size();i++)
   {
     if (isdigit(S[i]))  t+=S[i];     
     else {
            sum+=atoi(t.c_str());        
            t="";
          }
   }
   
   cout<<sum<<"\n";
 
    return 0;
}
0
Mobile Software Engineer
Эксперт С++
 Аватар для Ev[G]eN
5381 / 1585 / 956
Регистрация: 23.01.2011
Сообщений: 3,214
07.02.2014, 17:39
а разве "123gdgh54" можно считать числом?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
07.02.2014, 19:45
Это можно считать строкой, введенной пользователем.
В строке есть числа 123 и 54
123+54 == 177
Миниатюры
Найти сумму чисел в строке, введённой пользователем  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2014, 19:45
Помогаю со студенческими работами здесь

Найти сумму положительных из 4-х чисел, введенных пользователем
1)Изер вводит 4 целых числа, надо найти сумму положительных из них #include&lt;stdio.h&gt; #include&lt;iostream.h&gt; ...

Найти сумму N вводимых пользователем чисел в диапазоне от -100 до 15
Найти сумму N вводимых пользователем чисел в диапазоне от -100 до 15.

Найти максимальную сумму чисел в одной строке и вывести на экран эту сумму и номер строки
2) Если в условиях задачи сказано &quot;Дан двумерный массив&quot;, то программа получает на вход два числа n и m, являющиеся числом строк и...

В заданной символьной строке, состоящей из букв и чисел, найти сумму чисел
2. Задана символьная строка, состоящая из букв и чисел. Напечатать сумму чисел.

Найти сумму чисел в строке
Условие: В строковую переменную через пробел записаны числа. Найти их сумму и преобразовать строку к виду: Число + Число +...+ Число =...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru