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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ курсовая http://www.cyberforum.ru/cpp-beginners/thread127155.html
Динамическая обработка информация о наличии автобусов в парке. Справочные сведения: Указание:Сведения о каждом автобусе содержат: 1. № автобуса; 2. фамилию и инициалы водителя; 3. номер маршрута. Программа должна обеспечивать: а) формирование данных о всех автобусах в виде списка; б) при выезде каждого автобуса из парка вводится номер автобуса, и про-грамма удаляет данные об этом...
C++ Передать строку через функцию. #pragma once class User { private: char *Surname; public: User(void); char SurnameReturn(); } http://www.cyberforum.ru/cpp-beginners/thread127151.html
шахматы C++
Разработать класс для моделирования шахматной фигуры, позволяю- щий хранить вместе с экземпляром объекта его координаты на доске, цвет фигуры и число сделанных ей ходов. Встроенная функция “ход” должна получать новые координаты в виде параметров и изменять по- ложение фигуры на доске. Ходы, недопустимые для данной фигуры, не должны изменять ее координаты. Дана фигура: слон.
C++ Текстовый файл
Разработайте программу, форматирующую текстовый файл в два столб- ца, аналогично газетным колонкам. В каждом столбце должно быть не более n слов, где n — параметр ком. строки. ________________ на С
C++ Почему возникает ошибка? http://www.cyberforum.ru/cpp-beginners/thread127141.html
template <class T> class HashTable { .... }; class FileHashTable: public HashTable <Policy> { public: FileHashTable() // здесь возникает ошибка: error C2512: 'HashTable<struct Policy>' : no appropriate default constructor available {
C++ Определить, сколько раз встречается в файле введенное пользователем слово Дан текстовый файл. Напишите программу, которая определяет, сколько раз встречается в файле введенное пользователем слово. файл: C:\file.txt подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
11.05.2010, 00:10     Вывести на экран в алфавитном порядке согласные буквы, std::set
Вот пример для латиницы. С русским алфавитом делайте аналогично. А вы в каком компиляторе работаете, и как вам преподаватели рекомендуют работать с русским текстом в консольном приложении?

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