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

Работа над множествами,STL - C++

Восстановить пароль Регистрация
 
MSXP
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 29
03.02.2011, 00:40     Работа над множествами,STL #1
Собственно есть задача:
Дан некий текст.Нужно в алфавитном порядке напечатать все гласные буквы входящие в этот текст более двух раз и все согласные, которые входят только в одно слово.

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

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 <sstream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
typedef map <string, int> map_s_i;
void print_word(const map_s_i::value_type &rcP)
{
cout << rcP.first << ": " << rcP.second << endl;
}
 
int main()
{
string str_text;
map_s_i mword_cnt;
cout << "Введите текст: ";
getline(cin, str_text);
istringstream ss_text(str_text);
string str_word;
while (ss_text >> str_word)
++ mword_cnt[str_word];
for_each(mword_cnt.begin(), mword_cnt.end(), print_word);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2011, 00:40     Работа над множествами,STL
Посмотрите здесь:

C++ Операции над множествами!
C++ Операции над множествами
C++ Операции над множествами
Операции над множествами. C++
C++ C++ операции над множествами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igor_bogomolov
22 / 22 / 2
Регистрация: 02.02.2011
Сообщений: 27
03.02.2011, 01:20     Работа над множествами,STL #2
Не вчитывался в ваш код.
Я бы поступил следующим образом, так сказать попробую описать алгоритм на пальцах

Сделаю ограничение, что слова только на Русском. Регистр не учитываю. Это сейчас не имеет значения, т.к. расширяется элементарно.

В нашем алфавите 33 буквы. Значит создаём массив из 33 целочисленных элементов. Букве 'а' соответствует нулевой элемент массива, 'я' - 32ой. Каждый элемент массива будет хранить киличество вхождений буквы в текст. Т.о. читая текст посимвольно, мы за один проход можем подсчитать сколько раз каждая из букв встретилась в тексте. Ну а дальше, так как алфавит это у нас отсортированная последовательность, пробегаясь по нашему массиву однократно, составляем наши последовательности из букв удовлетворяющих заданному условию.

Закодировать надеюсь проблем не составит
MSXP
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 29
03.02.2011, 09:05  [ТС]     Работа над множествами,STL #3
Спасибо за понятное и простое объяснение.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
03.02.2011, 11:39     Работа над множествами,STL #4
MSXP, ты же со словами всё правильно сделал. Замени map<string, int> на map <char, int> и читай не слова, а буквы. Вот тебе и решение.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
03.02.2011, 12:13     Работа над множествами,STL #5
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<iostream>
#include<algorithm>
#include<sstream>
#include<map>
#include<set>
using namespace std;
 
int main(){
    string s, vaw="aeiouyAEIOUY";
    getline(cin, s);
    map<char, int> con;
    for_each(s.begin(), s.end(), [&](char x){++con[x];});
    cout<<"Vowels\n";
    for_each(con.begin(), con.end(), [&](pair<char, int> x){
        if((find(vaw.begin(), vaw.end(), x.first)!=vaw.end())&&x.second>2)
             cout<<x.first<<" - "<<x.second<<"\n";
    });
    con.clear();
    set<char> se;
    stringstream ss(s);
    while(ss>>s){
        for_each(s.begin(), s.end(), [&](char x){se.insert(x);});
        for_each(se.begin(), se.end(), [&](char x){++con[x];});
        se.clear();
    }
    cout<<"\n\nConsonants\n";
    for_each(con.begin(), con.end(), [&](pair<char, int> x){
        if((find(vaw.begin(), vaw.end(), x.first)==vaw.end())&&x.second==1){
             cout<<x.first<<" ";
        }
    });
}
MSXP
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 29
03.02.2011, 14:02  [ТС]     Работа над множествами,STL #6
igorrr37, Вдвойне спасибо, что-то я не додумал)
Yandex
Объявления
03.02.2011, 14:02     Работа над множествами,STL
Ответ Создать тему
Опции темы

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