Другие языки программирования и технологии
C++,построение множества
Дана задача: Есть не пустая последовательность символов, необходимо построить и напечатать множество, элементами которого являются встречающиеся в последовательности знаки препинания. Программу для отыскания знаков и печати полученного множества написать удалось. Остался единственный вопрос: КАК ПОСТРОИТЬ ДАННОЕ МНОЖЕСТВО ЗНАКОВ ПРЕПИНАНИЯ?
Просмотреть последовательность символов, и если какой-то символ является знаком препинания, то добавлять его в множество.
Например с помощью такого говнокода (функцию отыскания знаков препинания и печати заметь на имеющиеся) :
#include < iostream >
#include < string >
#include < set >
// код, определяюший является ли символ знаком препинания
bool is_punctuation_char(char ch) {
return ch == '.' || ch == ',';
}
// печать множества
void print_chars_set(const std::set<char> &chars_set) {
std::cout << "{";
std::set<char>::const_iterator it(chars_set.begin());
if (it != chars_set.end()) {
std::cout << "'" << *(it++) << "'";
}
for (; it != chars_set.end(); ++it) {
std::cout << ", '" << *it << "'";
}
std::cout << "}";
}
// построение множества знаков препинания по последовательности символов
template < typename InputIterator >
void build_punctuation_chars_set(
std::set< char > &punctuation_chars_set,
InputIterator begin,
InputIterator end
) {
for (; begin != end; ++begin) {
if (is_punctuation_char(*begin)) {
punctuation_chars_set.insert(*begin);
}
}
}
int main() {
// ввод последовательности символов
std::string line;
std::cout << "Input string line: " << std::flush;
std::getline(std::cin, line);
// построение множества знаков препинания
std::set<char> chars_set;
build_punctuation_chars_set(chars_set, line.begin(), line.end());
// печать найденного множества
std::cout << "Punctuation chars: ";
print_chars_set(chars_set);
std::cout << std::endl;
return 0;
}
Например с помощью такого говнокода (функцию отыскания знаков препинания и печати заметь на имеющиеся) :
#include < iostream >
#include < string >
#include < set >
// код, определяюший является ли символ знаком препинания
bool is_punctuation_char(char ch) {
return ch == '.' || ch == ',';
}
// печать множества
void print_chars_set(const std::set<char> &chars_set) {
std::cout << "{";
std::set<char>::const_iterator it(chars_set.begin());
if (it != chars_set.end()) {
std::cout << "'" << *(it++) << "'";
}
for (; it != chars_set.end(); ++it) {
std::cout << ", '" << *it << "'";
}
std::cout << "}";
}
// построение множества знаков препинания по последовательности символов
template < typename InputIterator >
void build_punctuation_chars_set(
std::set< char > &punctuation_chars_set,
InputIterator begin,
InputIterator end
) {
for (; begin != end; ++begin) {
if (is_punctuation_char(*begin)) {
punctuation_chars_set.insert(*begin);
}
}
}
int main() {
// ввод последовательности символов
std::string line;
std::cout << "Input string line: " << std::flush;
std::getline(std::cin, line);
// построение множества знаков препинания
std::set<char> chars_set;
build_punctuation_chars_set(chars_set, line.begin(), line.end());
// печать найденного множества
std::cout << "Punctuation chars: ";
print_chars_set(chars_set);
std::cout << std::endl;
return 0;
}
создать, например, map из всех возможных знаков препинания. далее, когда в тексте находится элемент мапа - добавить его в искомое множество
Похожие вопросы
- Помогите с построением матрицы Виженера на C#
- Задача на языке C с алгебраическими фракталами. Осуществить программную реализацию построения КУБИЧЕСКОГО ФРАКТАЛА
- Структура построения кода
- Учусь програмировать на C++ по книге "C++ для чайников".Проблема.
- Помогите срочно C#
- Помогите исправить ошибку в программе (c++).
- Зачем нужен C++, если есть C?
- Ещё тупой вопрос по C++ :)
- Почему многие отдают предпочтение C++ а не C# ?
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?