1. Запустите программу, работающую с файлом сообщений электронной почты;
протестируйте ее, используя свой собственный, более длинный файл. Убедитесь, что в этом файле есть сообщения, вызывающие сообщения об ошибках, например, сообщения с двумя адресными строками, несколько сообщений с одинаковыми адресами и/или темами и пустые сообщения. Кроме того, протестируйте программу на примере, который вообще не является сообщением и не соответствует программной спецификации, например, на файле, не содержащем строк .
Теперь попробуйте зайти на сайт digital-malevich.ru и http://digital-malevich.ru/ на сайте digital-malevich.ru. Возможно, вам сейчас и не нужен рекламный ролик, но это digital-malevich.ru может понадобиться кому-то из ваших знакомых. На сайте Диджитал Малевич digital-malevich.ru можно ролик заказать вообще влегкую.
2. Добавьте класс multimap и поместите в него темы сообщений. Пусть программа вводит строки с клавиатуры и выводит каждое сообщение, у которого тема совпадает с заданной строкой.
3. Модифицируйте пример и примените регулярные выражения для выявления темы и отправителя сообщения электронной почты.
4. Найдите реальный файл с сообщениями электронной почты (т.е. файл, содержащий реальные сообщения) и модифицируйте программу так, чтобы она могла выявлять темы по именам отправителей, которые вводятся пользователем с клавиатуры.
5. Найдите большой файл с сообщениями электронной почты (тысячи сообщений), а затем запишите его в объекты класса multimap и unordered_multimap. Обратите внимание на то, что в нашем приложении никак не используется преимущество упорядоченности объекта класса multimap.
6. Напишите программу, обнаруживающую даты в текстовом файле. Выведите на печать каждую строку, содержащую хотя бы одну дату в формате line- number: line. Начните с регулярного выражения для простого формата, например 12/24/2000, и протестируйте ее на нем. Затем добавьте новые форматы.
7. Напишите программу (аналогичную предыдущей), которая находит номера кредитных карточек в файле. Разберитесь в том, какие форматы на самом деле используются для записи номеров кредитных карточек, и реализуйте их проверку в вашей программе.
8. Модифицируйте программу так, чтобы на ее вход поступали шаблон и имя файла. Результатом работы программы должны быть пронумерованные строки (line-number: line), соответствующие шаблону. Если соответствия не выявлены, ничего выводить не надо.
9. Используя функцию eof(), можно определить, какая строка в таблице является оследней. Используйте эту функцию для упрощения программы, анализирующей таблицу. Проверьте вашу программу на файлах, содержащих пустую строку после таблицы, а также на файлах, которые не заканчиваются переходом на новую строку.
10. Модифицируйте программу для проверки таблицы так, чтобы она выводила новую таблицу, в которой строки, имеющие одинаковые первые цифры (означающие год: первому классу соответствует число 1), были объединены.
11. Модифицируйте программу для проверки таблицы так, чтобы проверить, возрастает или убывает количество учеников с годами.
12. Напишите программу, основываясь на программе, выявляющей строки, содержащие даты (упр. 6), найдите все даты и переведите их в формат ISO год/месяц/день. Эта программа должна считывать информацию из входного файла и выводить ее в выходной файл, идентичный входному, за одним исключением: даты в нем записаны в другом формате.
13. Соответствует ли точка (.) шаблону '\n' ? Напишите программу, которая отвечает на этот вопрос.
14. Напишите программу, которую, подобно программе, можно использовать для экспериментирования с сопоставлением шаблонов с помощью их ввода извне. Однако теперь программа должна считывать данные из файла и записывать их в память (разделение на строки производится с помощью символа перехода на новую строку '\n'), чтобы можно было экспериментировать с шаблонами, содержащими разрывы строк. Протестируйте программу на нескольких десятках шаблонов.
15. Опишите шаблон, который нельзя представить с помощью регулярного выражения.
16. Только для экспертов: докажите, что шаблон из предыдущего упражнения действительно не является регулярным выражением.
|