5-я группа ... некоторые библиотечные механизмы.Olej писал(а): 4-й транш: указатели и адресная арифметика.
Некоторые - это:
- строки ... string, но не только ... и char[] в сообществе с string;
- потоковый ввод-вывод (<<, >>, и т.д.), как терминальный, так и файловый;
- параллельные потоки, класс thread:: ...
строки:
1. Реализовать построчное (!) чтение из текстового файла,
с поиском всех вхождений заданного фрагмента в каждой считанной строке.
2. То же, что и п.1, но использовать не string, а char[].
3. 3. То же, что и п.1, но искать не вхождения вообще фрагмента текста (!), а
отдельного слова (токена).
Контроль:
Например, найти "name":
- string name aaa - здесь ОК
- this is namespase aaa - а здесь нет вхождения слова
- this is left-name - и здесь нет
- find name, or return false - а здесь опять же ОК
ввод-вывод:
1. 1. Реализовать функциональный эквивалент утилиты cat (при вводе в cat с терминала - повторитель ввода), предполагаем работу только с латиницей (cin -> cout), ввод построчный (!).
В качестве буфера ввода использовать char[].
Отработать конец ввода: ^D.
Выводить длину введенной строки.
Посмотреть длину введенной строки для русскоязычного ввода. Почему несоответствие?
1.2. То же, что п.1.1, но в качестве буфера ввода использовать string.
2. Классы ifstream, ofstream ...
Реализовать эквивалент cp для побайтового копирования произвольного бинарного (или текстового) файла.
3. Реализовать построчное (!!!) копирование для тестовых файлов.
(учесть, что последняя строка может быть без завершающего '\n')
4. То же. что п.1, но обеспечить работу с символами UNICODE в кодировке UTF-8 (wcin -> wcout не подходит ... почему?).
Обеспечить корректную работу с русскими строками (длина, поиск, ...).
5.1. Создать собственную структуру (!!!) с несколькими полями.
Для переменных такой структуры определить собственные операции (функции) ввода и вывода ( <<, >>).
Реализовать программу, заполняющую в диалоге экземпляр структуры.
5.2. Как в пред. п., создать собственный класс (!!!) с несколькими полями.
Для переменных этого класса собственные операции (методы) ввода и вывода ( <<, >>) ввести в определения класса.
Реализовать программу, заполняющую в диалоге экземпляр класса.
P.S. Этот каталог-архив у меня называется wrapers.ios, потому что это только С++ обёртки для системных вызовов библиотеки С из определений <fcntl.h> (int open() и т.д.), а ещё больше из <stdio.h> (FILE *fopen() и т.д.).
Это же касается класса thread:: <thread>, который есть ни чем большим, чем обёрткой POSIX pthread_t.
Только авторы C++ сильно это ... не афишируют, чем вносят изрядную невнятицу для изучающих C++.
wrapers.thread.tgz ещё совсем не готов, и будет добавлен позже.