Читаем Программирование. Принципы и практика использования C++ Исправленное издание полностью

10. В чем заключается разница между классами map и multimap? Какой полезной операции, существующей в классе map, нет в классе multimap и почему?

11. Какие операции требуются для однонаправленного итератора?

12. В чем заключается разница между пустым и отсутствующим полем? Приведите два примера.

13. Зачем нужен символ управляющей последовательности при формировании регулярных выражений?

14. Как превратить регулярное выражение в переменную типа regex?

15. Какие строки соответствуют шаблону \w+\s\d{4}? Приведите три примера. Какой строковый литерал нужно использовать для инициализации переменной типа regex заданным шаблоном?

16. Как (в программе) выяснить, является ли строка корректным регулярным выражением?

17. Что делает функция regex_search()?

18. Что делает функция regex_match()?

19. Как представить символ точки (.) в регулярном выражении?

20. Как выразить понятие “не меньше трех” в регулярном выражении?

21. Относится ли символ 7 к группе \w? А символ _ (подчеркивания)?

22. Какое обозначение используется для символов в верхнем регистре?

23. Как задать свой собственный набор символов?

24. Как извлечь значение из целочисленного поля?

25. Как представить число с плавающей точкой с помощью регулярного выражения?

26. Как извлечь число с плавающей точкой из строки, соответствующей шаблону?

27. Что такое частичное совпадение (sub-match)? Как его обнаружить?

Термины

Упражнения

1. Запустите программу, работающую с файлом сообщений электронной почты; протестируйте ее, используя свой собственный, более длинный файл. Убедитесь, что в этом файле есть сообщения, вызывающие сообщения об ошибках, например, сообщения с двумя адресными строками, несколько сообщений с одинаковыми адресами и/или темами и пустые сообщения. Кроме того, протестируйте программу на примере, который вообще не является сообщением и не соответствует программной спецификации, например, на файле, не содержащем строк ----.

2. Добавьте класс multimap и поместите в него темы сообщений. Пусть программа вводит строки с клавиатуры и выводит каждое сообщение, у которого тема совпадает с заданной строкой.

3. Модифицируйте пример из раздела 23.4 и примените регулярные выражения для выявления темы и отправителя сообщения электронной почты.

4. Найдите реальный файл с сообщениями электронной почты (т.е. файл, содержащий реальные сообщения) и модифицируйте программу так, чтобы она могла выявлять темы по именам отправителей, которые вводятся пользователем с клавиатуры.

5. Найдите большой файл с сообщениями электронной почты (тысячи сообщений), а затем запишите его в объекты класса multimap и unordered_multimap. Обратите внимание на то, что в нашем приложении никак не используется преимущество упорядоченности объекта класса multimap.

6. Напишите программу, обнаруживающую даты в текстовом файле. Выведите на печать каждую строку, содержащую хотя бы одну дату в формате linenumber:line. Начните с регулярного выражения для простого формата, например 12/24/2000, и протестируйте ее на нем. Затем добавьте новые форматы.

7. Напишите программу (аналогичную предыдущей), которая находит номера кредитных карточек в файле. Разберитесь в том, какие форматы на самом деле используются для записи номеров кредитных карточек, и реализуйте их проверку в вашей программе.

8. Модифицируйте программу из раздела 23.8.7 так, чтобы на ее вход поступали шаблон и имя файла. Результатом работы программы должны быть пронумерованные строки (line–number:line), соответствующие шаблону. Если соответствия не выявлены, ничего выводить не надо.

9. Используя функцию eof() (раздел Б.7.2), можно определить, какая строка в таблице является последней. Используйте эту функцию для упрощения программы, анализирующей таблицу (см. раздел 23.9). Проверьте вашу программу на файлах, содержащих пустую строку после таблицы, а также на файлах, которые не заканчиваются переходом на новую строку.

10. Модифицируйте программу для проверки таблицы из раздела 23.9 так, чтобы она выводила новую таблицу, в которой строки, имеющие одинаковые первые цифры (означающие год: первому классу соответствует число 1), были объединены.

11. Модифицируйте программу для проверки таблицы из раздела 23.9 так, чтобы проверить, возрастает или убывает количество учеников с годами.

12. Напишите программу, основываясь на программе, выявляющей строки, содержащие даты (упр. 6), найдите все даты и переведите их в формат ISO год/месяц/день. Эта программа должна считывать информацию из входного файла и выводить ее в выходной файл, идентичный входному, за одним исключением: даты в нем записаны в другом формате.

13. Соответствует ли точка (.) шаблону '\n'? Напишите программу, которая отвечает на этот вопрос.

Перейти на страницу:

Похожие книги

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных