Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
2 / 2 / 1
Регистрация: 16.03.2011
Сообщений: 82
1

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

16.03.2011, 23:41. Показов 2879. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно выполнить эту задчку используя только библиотеки string и iostream.
Буду очень благодарен, если вам не трудно.

Дано осмысленное текствовое сообщение (т.е. алфавитно-цифровая информация, разделенная
пробелами и знаками препинания, в конце которого ставится точка.

Вывести только те слова сообщения, которые встречаются в нем более n раз.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2011, 23:41
Ответы с готовыми решениями:

Вывести только те слова сообщения, которые встречаются в нем ровно один раз
Дано осмысленное текстовое сообщение (т.е. алфавитно-цифровая информация, разделенная пробелами и...

Вывести только те слова сообщения, которые встречаются в нем ровно один раз
Вывести только те слова сообщения, которые встречаются в нем ровно один раз. Помогите исправить...

Вывести только те слова сообщения, которые встречаются в тексте один раз
Дано осмысленное текстовое сообщение (т.е. алфавитно-цифровая информация, разделенная пробелами и...

Вывести только те слова сообщения, которые содержат не более чем n букв
Можете помочь написать программу? Желательно просто и используя using namespace std; Я не сильно...

10
Заблокирован
16.03.2011, 23:48 2
Насколько осмысленным есть текствовое сообщение ? Анализировать ли это?
0
2 / 2 / 1
Регистрация: 16.03.2011
Сообщений: 82
17.03.2011, 06:46  [ТС] 3
осмысленное т.е используются пробелы и знаки препинания :
например string razdel =".,;:?!";

Добавлено через 6 часов 56 минут
Посмотрите , кто может, плиз
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.03.2011, 11:53 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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"));    
    }
}
2
 Аватар для Mayonez
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
17.03.2011, 11:58 5
Цитата Сообщение от Mr.X Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
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;
}
а зачем это?
0
 Аватар для MILAN
899 / 793 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
17.03.2011, 12:10 6
Цитата Сообщение от Mayonez Посмотреть сообщение
а зачем это?
Может я конечно ошыбаюсь, но мне кажется ета функция позволяет вводить строку русской раскладкой.
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
17.03.2011, 12:19 7
Цитата Сообщение от Mayonez Посмотреть сообщение
а зачем это?
Без этого введенные с консоли символы кириллицы при выводе обратно на консоль превратятся в кракозябры.
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
17.03.2011, 14:09 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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 <locale>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <map>
 
int main()
{
    typedef std::ctype<char> StdFacet;
    typedef unsigned char uchar;
 
    //--------
 
    std::cout << "Input string: ";
    std::string line;
    std::getline(std::cin, line);    
 
    std::vector<StdFacet::mask> masks(StdFacet::table_size, StdFacet::mask());
 
    const std::string delim = "!?., ";
    for(std::string::const_iterator it = delim.begin(); it != delim.end(); ++it)
        masks[static_cast<uchar>(*it)] = StdFacet::space;
 
    std::istringstream iss(line);
    std::locale loc(iss.getloc(), new StdFacet(&masks[0]));
    iss.imbue(loc);
 
    std::map<std::string, int> m;
    std::string t;
    while(iss >> t) ++m[t];
 
    std::cout << "input n: ";
    int n;
    std::cin >> n;
 
    for(std::map<std::string, int>::iterator it = m.begin(); it != m.end(); ++it)
        if(it->second > n) std::cout << it->first << '\n';
 
    return 0;
}
1
2 / 2 / 1
Регистрация: 16.03.2011
Сообщений: 82
17.03.2011, 16:49  [ТС] 9
Спасибо огромное!
НО, нужно сделаь было используя только библиотеки string и iostream. Если это невозможно спасибо и на этом, а если возможно очень прошу сделать кто может.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
18.03.2011, 00:58 10
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
#include <iostream>
#include <string>
 
//-------------
 
struct Item
{
    std::string word;
    int occurences;
    Item* next;
 
    Item(const std::string& s)
        : word(s), occurences(1), next(NULL)
    {
    }
};
 
//-------------
 
Item* add(Item* pointerTo1stItem, const std::string& str)
{
    if(pointerTo1stItem == NULL) return new Item(str);
 
    Item* last;
    for(Item* item = pointerTo1stItem; item != NULL; item = item->next)
    {
        if(item->word == str)
        {
            ++item->occurences;
            return pointerTo1stItem;
        }
 
        last = item;
    }
 
    last->next = new Item(str);
 
    return pointerTo1stItem;
}
 
//------------
 
void cleanUp(Item* item)
{
    Item* next;
    while(item != NULL)
    {
        next = item->next;
        delete item;
        item = next;
    }
}
 
//-------------
 
int main()
{
    std::cout << "input sentence: ";
    std::string s;
    std::getline(std::cin, s, '.');
    s+= '.';
 
    const std::string delim = "\n\t,.!? ";
 
    std::string::size_type first = 0;
    std::string::size_type last = 0;
 
    Item* item = NULL;
 
    while(s[last] != '.' && (first = s.find_first_not_of(delim, last)) != std::string::npos)
    {
        last = s.find_first_of(delim, first);
        item = add(item, s.substr(first, last - first));
    }
 
    std::cout << "input n: ";
    int n;
    std::cin >> n;
 
    for(Item* p = item; p != NULL; p = p->next)
        if(p->occurences > n) std::cout << p->word << '\n';
 
    cleanUp(item);
 
    return 0;
}
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
18.03.2011, 15:53 11
rangerx, оригинально! Только почему у вас двоеточие не считается знаком препинания?
0
18.03.2011, 15:53
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.03.2011, 15:53
Помогаю со студенческими работами здесь

Вывести только те слова сообщения, которые содержат не более чем n букв
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются...

Дана символьная строка. Вывести на экран только те символы, которые встречаются в ней более трех раз, для каждого из эти
мне нужно срочно!!!! помоги чем сможете. С++ Добавлено через 19 секунд Вот задание Дана...

Выбрать из текста только те символы, которые встречаются в нем только один раз
Здравствуйте, помогите пожалуйста написать программу:) Условие. Дана строка, содержащая текст на...

Выбрать из файла те символы, которые встречаются в нем только один раз
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru