Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MSXP
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 29
#1

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

03.02.2011, 00:40. Просмотров 1052. Ответов 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
#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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2011, 00:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа над множествами,STL (C++):

Операции над множествами - C++
Найти A B C, A ∩ B ∩ C, (A ∩ B) C, A ∩ (B C), если A={{1;2},{1;3},{2}}, B={{1;2;4},{2;3},{1}}, C={{1;3},{1}} Как вручную...

Операции над множествами - C++
Прошу помочь с написанием программы на с++. Нужно чтобы выполнялись операции над множествами, такие как: объединение, пересечение и...

Реализовать операции над множествами - C++
Собственно только началась учеба на первом курсе,и вот препод задал написать програму,которая реализует все действия над...

Операции над множествами - прокомментировать строку кода - C++
Это оперции над множествами Объясните пожалуйста что делает в case2. Хотя бы одну объясните пжл #include &lt;stdlib.h&gt; #include...

Выполнить логические операции над множествами, записанными в файлы - C++
Помогите пожалуйста написать программу на C++ Дано 3 множества А, В, С. Элементы множеств сохранены в файлах A.txt, B.txt, C.txt ...

Множества. Выполнить действия над множествами: (B - A) * C (по заданным условиям). - C++
Доброго времени суток. Помогите пожалуйста решить задачку по множествам. условие: Задан универсум X = . Необходимо задать множества...

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

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

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

Закодировать надеюсь проблем не составит
0
MSXP
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 29
03.02.2011, 09:05  [ТС] #3
Спасибо за понятное и простое объяснение.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
03.02.2011, 11:39 #4
MSXP, ты же со словами всё правильно сделал. Замени map<string, int> на map <char, int> и читай не слова, а буквы. Вот тебе и решение.
1
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
03.02.2011, 12:13 #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<<" ";
        }
    });
}
1
MSXP
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 29
03.02.2011, 14:02  [ТС] #6
igorrr37, Вдвойне спасибо, что-то я не додумал)
0
03.02.2011, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2011, 14:02
Привет! Вот еще темы с ответами:

Реализовать базовые операции над множествами: объединение, пересечение, дополнение - C++
Вот как звучит задание: &quot;Объект: множество символов алфавита. Реализовать базовые операции над множествами: объединение, пересечение,...

Провести операцию над множествами без использования стандартных алгоритмов - C++
Подскажите как провести операцию над множествами без использования стандартных алгоритмов: set_union (объединение), set_difference...

Операции над множествами - переписать код для работы с буквами - C++
Здравствуйте,помогите пожалуйста подкорректировать код. В общем есть код, который выполняет различные операции над множествами. Проблема в...

Реализовать классические операции над множествами - объединение, пересечение и симметричная разность - C++
Создать параметризованный тип данных - множество. Этот тип предназначен для хранения множества элементов и выполнения операций над ними....


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru