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

Вывести только те слова сообщения, которые встречаются в нем более n раз - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Uart + консольное приложение http://www.cyberforum.ru/cpp-beginners/thread258827.html
Здравствуйте, скажите как научить программу принимать и передавать данные по uart?
C++ Выборы На выборах в Государственную думу в избирательные бюллетени внесено N партий. Электронный сканер для считывания информации с бюллетеней передает информацию о каждом бюллетене в следующем формате: если в соответствующей клетке бюллетеня стоит пометка, то сканер передает + (плюс), в противном случае он передает - (минус). Таким образом, он передает последовательность из N символов - плюсов и... http://www.cyberforum.ru/cpp-beginners/thread258810.html
строки в С++ C++
Здравствуйте! В строке, введенной пользователем, удвоить количество символов "А" вдвое.
C++ Как из даты вычесть дату?
Продолжаю рисовать Вселенную, тема http://www.cyberforum.ru/cpp-beginners/thread258054.html (хотя это, впрочем, неважно). Нужно, вычислить, сколько дней прошло с заранее заданной даты до вводимого пользователем дня. Попыталась представить, как будет выглядеть функция, производящая такое вычисление, стало не по себе. Может, там (в с++(crl,wfa)) есть какие-нибудь стандартные функции для этого....
C++ С++ В одномерном массиве, состоящем из n вещественных элементов, вычислить.. http://www.cyberforum.ru/cpp-beginners/thread258756.html
В одномерном массиве, состоящем из n вещественных элементов, вычислить: − количество элементов массива, меньших С; − сумму целых частей элементов массива, расположенных после последнего отрицательного элемента. Сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом – все остальные.
C++ Поиск и замена символов в файле Добрый вечер(день)! Пытаюсь разобраться с задачей, есть файл в нем нужно найти слово и заменить на другое,замена может быть разной длины и сохранить это всё дело в новом файле с именем в формате дата_создания.тхт Знаю, что примерно надо рыть в сторону фстримов seekp , но не могу понять как оно работает :(, помогите пожалуйста. за ранее спасибо! подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,688
17.03.2011, 11:53     Вывести только те слова сообщения, которые встречаются в нем более n раз
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/////////////////////////////////////////////////////////////////////////////////////////
//Дано осмысленное текствовое сообщение (т.е. алфавитно-цифровая информация, разделенная
//пробелами и знаками препинания, в конце которого ставится точка.
//
//Вывести только те слова сообщения, которые встречаются в нем более n раз. 
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <locale>
#include <set>
#include <sstream>
#include <string>
#include <windows.h> 
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string           T_str;
typedef std::set<T_str>       T_words_set;
typedef std::multiset<T_str>  T_words_multiset;
/////////////////////////////////////////////////////////////////////////////////////////
T_str  from_DOS(const T_str&  DOS_string)
{   
    char*  p_buf = new char[DOS_string.length() + 1];
    OemToCharA(DOS_string.c_str(), p_buf);
    T_str  res(p_buf);
    delete[] p_buf;
    return res;
}
/////////////////////////////////////////////////////////////////////////////////////////
void  remove_puncts(T_str&  s)
{
    struct  T_is_rus_punct
    {
        bool  operator() (char  c)
        {
            return  std::ispunct(c, std::locale(""));
        }
    };
    std::replace_if(s.begin(), s.end(), T_is_rus_punct(), ' ');
}
/////////////////////////////////////////////////////////////////////////////////////////
T_words_set  get_words_with_count_greater
    (
        int           n, 
        const T_str&  s
    )
{   
    std::istringstream  ssin(s);
    T_words_multiset  words_multiset(
                                        (std::istream_iterator<T_str>(ssin)),
                                        (std::istream_iterator<T_str>())
                                    );
 
    struct T_count_is_less_eq_in
    {
        size_t                   n_;
        const T_words_multiset&  words_multiset_;    
        //-------------------------------------------------------------------------------
        T_count_is_less_eq_in
            (
                size_t                   n,
                const T_words_multiset&  words_multiset            
            )
            : n_               (n),
              words_multiset_  (words_multiset)
        {}
        //-------------------------------------------------------------------------------
        bool  operator() (T_words_multiset::value_type  words_multiset_elem)
        {
            return  words_multiset_.count(words_multiset_elem) <= n_;
        }
    };
 
    T_words_set  words_set_res;
 
    std::remove_copy_if(
                           words_multiset.begin(),
                           words_multiset.end(),
                           std::inserter(words_set_res, words_set_res.begin()),
                           T_count_is_less_eq_in(n, words_multiset)
                       );
 
    return  words_set_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите предложение:"
              << std::endl;
    
    T_str  DOS_s;
    getline(std::cin, DOS_s);
    T_str  s = from_DOS(DOS_s);
    remove_puncts(s);
 
    int  n = 0;
    do
    {
        std::cout << "n >= 0: ";
        std::cin >> n;
    }while(n < 0);        
    
    T_words_set  words_set = get_words_with_count_greater(n, s); 
    if(words_set.empty())
    {
        std::cout << "В заданном предложении нет слов, встречающихся более "
                  << n
                  << " раз."
                  << std::endl;
    }
    else
    {
        std::cout << "В заданном предложении более "
                  << n
                  << " раз встречаются следующие слова:"
                  << std::endl;
 
        std::copy(words_set.begin(), words_set.end(), 
                  std::ostream_iterator<T_str>(std::cout, "\n"));    
    }
}
 
Текущее время: 14:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru