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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
07.02.2014, 09:03     Найти сумму чисел в строке, введённой пользователем #1
Здравствуйте, я пытаюсь решить некоторые задачи по 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++.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cooller
 Аватар для cooller
564 / 532 / 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;
}
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
07.02.2014, 10:05  [ТС]     Найти сумму чисел в строке, введённой пользователем #3
cooller_94.
Спасибо за решение, но я в нём не очень разобрался.
А можно как-нибудь изменить мой код? Мне хочется узнать, где в нём ошибки.
S_el
1907 / 1502 / 296
Регистрация: 15.12.2013
Сообщений: 5,917
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;
}
albert!
3 / 3 / 0
Регистрация: 23.01.2013
Сообщений: 45
07.02.2014, 10:50  [ТС]     Найти сумму чисел в строке, введённой пользователем #5
Нет, ваш способ работает только для цифр, а не для чисел. То есть если ввести 12,34, то программа выведет в качестве ответа число 10, так как 1+2+3+4 = 10. А мне нужно найти именно сумму чисел, а не цифр.
S_el
1907 / 1502 / 296
Регистрация: 15.12.2013
Сообщений: 5,917
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 Учитывал символом разделителем только запятую,проверку на пробел и окончание строки сделайте сами.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 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;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2014, 14:31     Найти сумму чисел в строке, введённой пользователем #8
Ev[G]eN, может всё-таки strtok(NULL, delim) вместо nullptr!?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.02.2014, 14:36     Найти сумму чисел в строке, введённой пользователем #9
Kuzia domovenok, я дико извиняюсь, а в чем разница?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2014, 15:38     Найти сумму чисел в строке, введённой пользователем #10
Ev[G]eN, в том, что из-за одного слова, не вносящего никакой разницы в код, резко ограничивается количество возможностей "как скомпилировать программу"
ради кучи кода с полезными ништяками на новых шаблонах и.т.п. я, пожалуй, переустановлю ИДЕ. Ради строчки, в которой можно заменить одно слово НЕТ!
Ev[G]eN
07.02.2014, 15:48
  #11

Не по теме:

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

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2014, 15:56     Найти сумму чисел в строке, введённой пользователем #12
Ev[G]eN, чё за фигня менять стандарты раз в три года? За три года универ не закончишь! За три года крупный проект не напишешь! Ты представляешь себе писать какой нибудь CAD или игровой движок 3 года, а потом переписывать столько же под новый стандарт?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.02.2014, 16:00     Найти сумму чисел в строке, введённой пользователем #13
Kuzia domovenok, жизнь не стоит на месте
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.02.2014, 16:13     Найти сумму чисел в строке, введённой пользователем #14
Ev[G]eN, в том же python, на сколько я знаю, таких проблем нет. Там, к примеру, вторая и третья версии несовместимы и фактически разные языки!

Добавлено через 13 минут
Ev[G]eN, стандарт это как раз то, чему хорошо бы постоять на месте. Всё на свете не выучишь. Потому, Для всяких доп. Возможностей у языка есть библиотеки. Их можно обновлять хоть каждый день те, кто заинтересован выучит, другой найдёт другие.
Но стандарт мало того, что врезает в ядро языка фичи, которые должны быть в библиотеках, он нагружает язык необходимостью поддержки старых и новых фич, превращает язык в сверхмультипарадигменного монстра, который заставляет программиста помнить несколько областей одновременно!
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
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;
}
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
07.02.2014, 17:39     Найти сумму чисел в строке, введённой пользователем #16
а разве "123gdgh54" можно считать числом?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 19:45     Найти сумму чисел в строке, введённой пользователем
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
07.02.2014, 19:45     Найти сумму чисел в строке, введённой пользователем #17
Это можно считать строкой, введенной пользователем.
В строке есть числа 123 и 54
123+54 == 177
Миниатюры
Найти сумму чисел в строке, введённой пользователем  
Yandex
Объявления
07.02.2014, 19:45     Найти сумму чисел в строке, введённой пользователем
Ответ Создать тему
Опции темы

Текущее время: 01:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru