Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
#1

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

07.02.2014, 09:03. Просмотров 1476. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 09:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти сумму чисел в строке, введённой пользователем (C++):

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

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

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

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

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

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

16
cooller
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
07.02.2014, 09:26 #2
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
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
07.02.2014, 10:05  [ТС] #3
cooller_94.
Спасибо за решение, но я в нём не очень разобрался.
А можно как-нибудь изменить мой код? Мне хочется узнать, где в нём ошибки.
0
S_el
2109 / 1628 / 308
Регистрация: 15.12.2013
Сообщений: 6,533
07.02.2014, 10:32 #4
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
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
07.02.2014, 10:50  [ТС] #5
Нет, ваш способ работает только для цифр, а не для чисел. То есть если ввести 12,34, то программа выведет в качестве ответа число 10, так как 1+2+3+4 = 10. А мне нужно найти именно сумму чисел, а не цифр.
0
S_el
2109 / 1628 / 308
Регистрация: 15.12.2013
Сообщений: 6,533
07.02.2014, 11:28 #6
Вам нужно просуммировать числа,вводимые в строку через запятую.Так бы сразу и написали

Добавлено через 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
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.02.2014, 11:53 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
07.02.2014, 14:31 #8
Ev[G]eN, может всё-таки strtok(NULL, delim) вместо nullptr!?
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.02.2014, 14:36 #9
Kuzia domovenok, я дико извиняюсь, а в чем разница?
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
07.02.2014, 15:38 #10
Ev[G]eN, в том, что из-за одного слова, не вносящего никакой разницы в код, резко ограничивается количество возможностей "как скомпилировать программу"
ради кучи кода с полезными ништяками на новых шаблонах и.т.п. я, пожалуй, переустановлю ИДЕ. Ради строчки, в которой можно заменить одно слово НЕТ!
0
Ev[G]eN
07.02.2014, 15:48
  #11

Не по теме:

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

0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
07.02.2014, 15:56 #12
Ev[G]eN, чё за фигня менять стандарты раз в три года? За три года универ не закончишь! За три года крупный проект не напишешь! Ты представляешь себе писать какой нибудь CAD или игровой движок 3 года, а потом переписывать столько же под новый стандарт?
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.02.2014, 16:00 #13
Kuzia domovenok, жизнь не стоит на месте
0
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
07.02.2014, 16:13 #14
Ev[G]eN, в том же python, на сколько я знаю, таких проблем нет. Там, к примеру, вторая и третья версии несовместимы и фактически разные языки!

Добавлено через 13 минут
Ev[G]eN, стандарт это как раз то, чему хорошо бы постоять на месте. Всё на свете не выучишь. Потому, Для всяких доп. Возможностей у языка есть библиотеки. Их можно обновлять хоть каждый день те, кто заинтересован выучит, другой найдёт другие.
Но стандарт мало того, что врезает в ядро языка фичи, которые должны быть в библиотеках, он нагружает язык необходимостью поддержки старых и новых фич, превращает язык в сверхмультипарадигменного монстра, который заставляет программиста помнить несколько областей одновременно!
0
daslex
1280 / 524 / 107
Регистрация: 02.08.2011
Сообщений: 2,739
07.02.2014, 17:27 #15
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
07.02.2014, 17:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 17:27
Привет! Вот еще темы с ответами:

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

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

Найти сумму чисел в строке - C++
Помогите найти сумму чисел в строке в Microsoft Visual Studio C++ Пока еще плохо знаю как программировать...так что если можно распишите...

Как найти сумму чисел в строке? - C++
Как найти сумму чисел в строке???не через функции, через char??


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru