Домашняя работа, которую необходимо реализовать для допуска к зачетам по РПО и ПЗР (одна из работ, которую обязательно нужно сделать в семестре).
В отдельных модулях необходимо реализовать следующие функции для работы со строками:
- перевода строки в верхний и нижний регистр (toUpper/toLower);
- удаления пробелов из начала и из конца строки (strip);
- удаления всех пробелов из строки;
- фильтрации строки (удаление всех символов, не являющихся буквой, цифрой или пробелом);
- проверки, является ли строка числом;
- проверки, состоит ли строка только из букв (проверяем только английские);
- шифрования строки алгоритмом Цезаря;
- шифрования и дешифрования строки алгоритмом XOR. Для каждой функции (кроме функций для проверок) необходимо реализовать изменяющую и не изменяющую версии (с соответствующими префиксами mutable/immutable в названиях функций).
Модули будут использоваться в программе-энкодере и программе-декодере (две разных программы!). Имена исполняемых файлов — encoder и decoder.
В функции main Энкодера необходимо зашифровать строку, введенную пользователем. Результат шифрования вывести на экран.
Перед шифрованием необходимо удалить лишние пробелы с концов строки и привести строку к нижнему регистру.
В функции main Декодера необходимо дешифровать строку, введенную пользователем. Результат декодирования вывести на экран.
Способ кодирования/декодирования и данные могут подаваться через аргументы функции main.
Способы передачи данных:
- ./encoder --caesar text offset — кодирование по Цезарю;
- ./encoder --xor text password — кодирование по XOR;
- ./encoder — способ кодирования и необходимые данные вводятся с помощью scanf. Для декодера передаются данные, с которыми шифровалась исходная строка! Например:
> ./decoder --caesar bcd 1
> Decoded string: abc
Если аргументами функции main переданы некорректные данные, то следует вывести на экран текст соответствующей ошибки и досрочно завершить процесс кодирования.
Провести файловую декомпозицию.
Написать два мейкфайла для каждой программы:
- в котором модули собираются как статические библиотеки;
- в котором модули собираются как динамические библиотеки.