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

Вывести на экран сумму чисел, встречающихся в тексте - C++

Восстановить пароль Регистрация
 
Grinderr
0 / 0 / 0
Регистрация: 11.11.2010
Сообщений: 7
11.11.2010, 21:59     Вывести на экран сумму чисел, встречающихся в тексте #1
Нужно написать программу, которая считывает текст с клавиатуры, и выводит на экран сумму чисел, встречающихся в тексте.


Я написал такую, что складываются только однозначные числа; к примеру в строке
" qwery123 qwert12"
сумму будет равна 9

А надо чтобы сумма получилась 135, т.е многозначные числа тоже складывалисть..помогите, я хз как )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2010, 21:59     Вывести на экран сумму чисел, встречающихся в тексте
Посмотрите здесь:

C++ Ввести с клавиатуры массив из 10 целых чисел, посчитать сумму и вывести на экран
C++ Вывести на экран сумму и среднее арифметическое N случайных чисел, заданных в диапазоне от А до В
C++ Вывести на экран сумму и значение чисел ниже главной диагонали матрицы
C++ Дан непустой массив из цифр. Вывести на экран цифру наиболее часто встречающихся в этом массиве.
C++ Найти сумму чисел в тексте
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OdNairy
 Аватар для OdNairy
7 / 7 / 1
Регистрация: 07.02.2010
Сообщений: 22
11.11.2010, 22:28     Вывести на экран сумму чисел, встречающихся в тексте #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
#include <string>
#include <typeinfo>
#include <cstdio>
using std::string;
using std::cout;
 
int main(int argc, char** argv) {
     string tmp;
    char* tm = new char [1024];
 
    gets(tm);
    tmp.assign(tm);
    int sum = 0,tmp_i = 0;
 
    for (int i = 0; i < tmp.length(); i++) {
        if (isdigit(tmp[i]))
            tmp_i = tmp_i*10+(tmp[i]-'0');
        else {
            sum+=tmp_i;
            tmp_i = 0;
        }
 
    }
    sum+=tmp_i;
 
    cout << sum;
    return 0;
}
Суть программы:
Вся идея в том, чтобы посимвольно обрабатывать строку и смотреть на принадлежность к числам. Если число - то умножаем предыдущее значение на 10 (увеличиваем разряд) и добавляет полученное значение. Как только "левый" символ - записываем в сумму. Ну и для того, чтобы получить порядок в таблице ASCII чисел, мы просто отнимает значение символа ноль =)

Добавлено через 12 минут
Там небольшая поправка, я позже заметил =). Если вносить строку с пробелом, то она не читается cin'ом. Для этого можно внести временную char-строку, принять в неё, и потом присвоить её значение string-строке. Знаю, что коряво, но более эффективного метода не знаю. Если кто-нибудь знает, милости прошу поправить меня.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 22:38     Вывести на экран сумму чисел, встречающихся в тексте #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Чуток изврата

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
#include <iostream>
#include <sstream>
#include <string>
 
int main()
{
    std::string Str;
    int numb;
    std::cout<<"String: ";
    std::getline(std::cin, Str);
    if(Str.empty())
    {
        std::cerr<<"String is empty\n";
        return 1;
    }
    std::string TempStr;
    int sum=0;
    for(int i=0; i!=Str.size(); ++i)
    {
        if(isdigit(Str[i]))
        {
            TempStr+=Str[i];
        }
        else
        {
            if(!TempStr.empty())
            {
                std::istringstream ist(TempStr);
                ist>>numb;
                sum+=numb;
                TempStr.clear();
            }
        }
    }
    if(!TempStr.empty())
    {
        std::istringstream ist(TempStr);
        ist>>numb;
        sum+=numb;
    }
    std::cout<<sum<<'\n';
    return 0;
}
Добавлено через 1 минуту
OdNairy,
C++
1
std::getline(std::cin, Str);
проверьте. Метод для string который читает из потока с пробелами.
Grinderr
0 / 0 / 0
Регистрация: 11.11.2010
Сообщений: 7
12.11.2010, 21:25  [ТС]     Вывести на экран сумму чисел, встречающихся в тексте #4
спасибо огромное, помогли !
Yandex
Объявления
12.11.2010, 21:25     Вывести на экран сумму чисел, встречающихся в тексте
Ответ Создать тему
Опции темы

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