Задача :
Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть, как и прежде, словами. Найти все слова, содержащие наибольшее количество гласных латинских букв ( a, e, i, o, u ).
Тесты :
Исходный текст | Обработанный текст |
Two households, both alike in dignity, In fair Verona, where we lay our scene, From ancient grudge break to new mutiny, Where civil blood makes civil hands unclean. |
households, unclean. alike Verona, ancient makes mutiny, Where break grudge civil scene, our blood where fair civil dignity, From hands new to Two lay we in both In |
For never was a story of more woe . Than this of Juliet and her Romeo. | Juliet Romeo never more woe for was a story of Than this of and her
|
Код программы:
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 |
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int counter(string a){ int c = 0; for (unsigned int i = 0; i < a.length(); i++){ if (a[i]=='e'||'u'==a[i]||'o'==a[i]||'i'==a[i]||'a'==a[i]){ c++; } } return c; } bool mod(string a, string b){ return counter(a) > counter(b); } int main() { vector <string> Words; string word; for (unsigned int i=0; cin >> word; i++){ Words.push_back(word); } sort(Words.begin(),Words.end(), mod); for(auto i: Words){ cout << i <<endl; } return 0; } |
Ссылка на программу : http://ideone.com/xXCrPe
Решение :
Для решение этой задачи я воспользовалась возможностью, которую предоставляет мне библиотека algorithm .
- Объявляем переменные – флаги и счетчики для всех видов слов.
- Функция для завершения чтения слова и увеличение счетчика слова на единицу
- Стандартный строковый объект класса string.
- Ввод текста из стандартного потока ввода
- Проход по символам текста
- Считаем
- Сортируем
Задача не решена. Обсудим на экзамене.