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

Вывести на экран в алфавитном порядке согласные буквы, std::set - C++

Восстановить пароль Регистрация
 
Галочка Громова
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
09.05.2010, 12:13     Вывести на экран в алфавитном порядке согласные буквы, std::set #1
Всем, здравствуйте! Помогите, пожалуйста, с задачей по С++.
К сожалению, я не понимаю(((

Мне необходимо использовать ассоциативный контейнер –
множество. Для выполнения операций с множествами задействовать алгоритмы библиотеки
STL.

Дан текст на русском языке. Вывести на экран в алфавитном порядке согласные буквы,
которые входят в каждое нечетное слово и не входят ни в одно четное слово; гласные
буквы, входящие только в одно слово.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2010, 12:13     Вывести на экран в алфавитном порядке согласные буквы, std::set
Посмотрите здесь:

Дан массив из строчных латинских букв. Вывести на экран в алфавитном порядке все буквы, которые входят в этот текст по одному разу C++
C++ Дан текст на русском языке. Напечатать в алфавитном порядке все согласные буквы,которые входят только в одно слово
C++ В алфавитном порядке вывести всё звонкие согласные, которые входят в каждое нечетное слово
C++ Напечатать в алфавитном порядке все согласные буквы, входящие в текст.
Напечатать в алфавитном порядке все согласные буквы, входящие в текст. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,696
09.05.2010, 19:58     Вывести на экран в алфавитном порядке согласные буквы, std::set #2
А под четным словом что подразумевается? Слово, имеющее четную длину, или стоящее на четном месте в тексте?
Галочка Громова
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
09.05.2010, 21:37  [ТС]     Вывести на экран в алфавитном порядке согласные буквы, std::set #3
слово, стоящее на чётном месте!!!!
я не знаю с чего начать(((
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,696
11.05.2010, 00:10     Вывести на экран в алфавитном порядке согласные буквы, std::set #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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
//Дан текст. Вывести на экран в алфавитном порядке согласные буквы,
//которые входят в каждое нечетное слово и не входят ни в одно четное слово; гласные
//буквы, входящие только в одно слово.
#include <set>
#include <algorithm>
#include <vector>
#include <sstream>
#include <iostream>
 
typedef std::set<char>           T_char_set;
typedef std::vector<T_char_set>  T_char_sets;
 
typedef std::vector<char> T_char_vect;
 
const std::string  sogl_string = "bcdfghjklmnpqrstvwxz";
const T_char_set   sogl_set(sogl_string.begin(), sogl_string.end());
 
const std::string  glasn_string = "aeiouy";
const T_char_set   glasn_set(glasn_string.begin(), glasn_string.end());
 
T_char_set operator*(const T_char_set& chs1, const T_char_set& chs2)
{    
    T_char_vect  intersec(chs1.size() + chs2.size());
    T_char_vect::const_iterator  new_intersec_end 
        = std::set_intersection(chs1.begin(), chs1.end(),
                                chs2.begin(), chs2.end(),
                                intersec.begin());
    intersec.erase(new_intersec_end, intersec.end());    
    return T_char_set(intersec.begin(), intersec.end()); 
}
 
T_char_set operator-(const T_char_set& chs1, const T_char_set& chs2)
{    
    T_char_vect  difference(chs1.size() + chs2.size()); 
    T_char_vect::const_iterator  new_diff_end 
        = std::set_difference(chs1.begin(), chs1.end(),
                              chs2.begin(), chs2.end(),
                              difference.begin());
    difference.erase(new_diff_end, difference.end());    
    return T_char_set(difference.begin(), difference.end()); 
}
 
T_char_set operator+(const T_char_set& chs1, const T_char_set& chs2)
{    
    T_char_vect  sunion(chs1.size() + chs2.size()); 
    T_char_vect::const_iterator  new_union_end 
        = std::set_union(chs1.begin(), chs1.end(),
                         chs2.begin(), chs2.end(),
                         sunion.begin());
    sunion.erase(new_union_end, sunion.end());    
    return T_char_set(sunion.begin(), sunion.end()); 
}
 
T_char_sets  get_text_words_char_sets(const std::string&  text)
{
    T_char_sets         res;
    std::istringstream  text_potok(text);
    std::string         cur_slovo;
    while(text_potok >> cur_slovo)
    {
        res.push_back(T_char_set(cur_slovo.begin(), cur_slovo.end()));
    }
    return res;
}
 
T_char_set  get_sogl_vxod_v_kazhd_nech_slovo
    (
        T_char_set   sogl_set,
        T_char_sets  text_words_char_sets
    )
{
    T_char_set  res(sogl_set);
    for(size_t i = 0; i < text_words_char_sets.size(); i += 2)
    {
        res = res * text_words_char_sets[i];    
    }
    return res;
}
 
T_char_set  get_sogl_ne_vxod_ni_v_odno_chet_slovo
    (
        T_char_set   sogl_set,
        T_char_sets  text_words_char_sets
    )
{
    T_char_set  res(sogl_set);
    for(size_t i = 1; i < text_words_char_sets.size(); i += 2)
    {
        res = res - text_words_char_sets[i];    
    }
    return res;
}
 
T_char_set  get_sogl_vxod_v_kazhd_nech_slovo_i_ne_vxod_ni_v_odno_chet_slovo
    (
        T_char_set   sogl_set,
        T_char_sets  text_words_char_sets
    )
{
    return get_sogl_vxod_v_kazhd_nech_slovo(sogl_set, text_words_char_sets)
           * get_sogl_ne_vxod_ni_v_odno_chet_slovo(sogl_set, text_words_char_sets);
}
 
T_char_set  get_glasn_vxod_tolko_v_odno_slovo
    (
        T_char_set   glasn_set,
        T_char_sets  text_words_char_sets
    )
{ 
    T_char_set  res;    
    for(size_t i = 0; i < text_words_char_sets.size(); ++i)
    {
        //Находим объединение всех эл-тов text_words_char_sets кроме i-го.
        T_char_set  sum_krome_i;
        for(size_t j = 0; j < text_words_char_sets.size(); ++j)
        {
            if(j == i) continue;
            sum_krome_i = sum_krome_i + text_words_char_sets[j];
        }
        //Вычитаем из текущего эл-та text_words_char_sets полученную сумму и добавляем
        //к результату.
        res = res + (text_words_char_sets[i] - sum_krome_i);
    }
    //Возвращаем гласные буквы полученного множества.
    return res * glasn_set;
}
 
std::ostream& operator<<(std::ostream& os, const T_char_set&  chs)
{
    os << std::string(chs.begin(), chs.end());
    return os;
}
 
std::ostream& operator<<(std::ostream& os, const T_char_sets&  ch_sets)
{
    for(T_char_sets::const_iterator ch_s_it = ch_sets.begin(); 
        ch_s_it != ch_sets.end(); ++ch_s_it)
    {
        os << *ch_s_it
           << " ";   
    }
    os << std::endl;
    return os;
}
 
int main()
{
    std::string  text;
    for(;;)
    {
        std::cout << "Input text: ";
        getline(std::cin, text);
        T_char_sets  text_words_char_sets = get_text_words_char_sets(text);
        T_char_set  sogl_vxod_v_kazhd_nech_slovo 
            = get_sogl_vxod_v_kazhd_nech_slovo(sogl_set, text_words_char_sets);
 
        T_char_set  sogl_ne_vxod_ni_v_odno_chet_slovo
            = get_sogl_ne_vxod_ni_v_odno_chet_slovo(sogl_set, text_words_char_sets);
 
        T_char_set  sogl_vxod_v_kazhd_nech_slovo_i_ne_vxod_ni_v_odno_chet_slovo
            = get_sogl_vxod_v_kazhd_nech_slovo_i_ne_vxod_ni_v_odno_chet_slovo
                  (sogl_set, text_words_char_sets);
 
        T_char_set  glasn_vxod_tolko_v_odno_slovo
            = get_glasn_vxod_tolko_v_odno_slovo(glasn_set, text_words_char_sets);
        
        std::cout << "text_words_char_sets: "
                  << text_words_char_sets
                  << "sogl_vxod_v_kazhd_nech_slovo: "
                  << sogl_vxod_v_kazhd_nech_slovo
                  << std::endl
                  << "sogl_ne_vxod_ni_v_odno_chet_slovo: "
                  << sogl_ne_vxod_ni_v_odno_chet_slovo
                  << std::endl
                  << "sogl_vxod_v_kazhd_nech_slovo_i_ne_vxod_ni_v_odno_chet_slovo: "
                  << sogl_vxod_v_kazhd_nech_slovo_i_ne_vxod_ni_v_odno_chet_slovo
                  << std::endl
                  << "glasn_vxod_tolko_v_odno_slovo: "
                  << glasn_vxod_tolko_v_odno_slovo
                  << std::endl
                  << std::endl;    
    }   
    return 0;
}
DrYea
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 29
01.05.2015, 09:32     Вывести на экран в алфавитном порядке согласные буквы, std::set #5
как сделать работоспособность для текста на русском
Yandex
Объявления
01.05.2015, 09:32     Вывести на экран в алфавитном порядке согласные буквы, std::set
Ответ Создать тему
Опции темы

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