В этом билете необходимо будет, используя и дорабатывая готовую библиотеку для REPL*)-приложений, разработать приложение для работы со строками.
*) - REPL (Read-Evaluate-Print Loop) - интерактивная среда программирования в командной строке, которая позволяет вводить код, немедленно его выполнять (вычислять) и видеть результат в цикле.
Проект состоит из header-only библиотеки repl, исходный код
которой находится в файлах:
- repl.hpp
- argument_parsers.hpp
- command.hpp
и двух приложений: калькулятора (calculator.cpp) и приложения для работы со строками (strings.cpp).
Калькулятор демонстрирует, как использовать код библиотеки
repl.
Приложение для работы со строками нужно разработать в этом задании.
Для сборки проекта выполните:
cmake -B build/
cmake --build build/Для тестирования калькулятора, выполните:
./build/calculatorВ интерактивном режиме попробуйте выполнить разные команды:
calc> help
exit, e
help, h
multiply, mul
squareroot, sqrt
calc> mul 45 6
270
calc> multiply 100.01 -0.05
-5.0005
calc> sqrt 7
2.64575
calc> foo
Error: command 'foo' not found
calc> sqrt
Error: invalid arguments number, expected: 1, actual: 0
calc> sqrt 10 10
Error: invalid arguments number, expected: 1, actual: 2
calc> exit
Для тестирования приложения strings выполните:
./build/stringsВ текущей реализации REPL для приложения strings поддерживает
только две встроенные команды:
exit,help.
Необходимо добавить следующие команды:
-
Конкатенация строк.
Короткое имя:ct.
Полное имя:concat.
Аргументы:std::string,std::string.
Возвращаемое значение:std::string. -
Поиск символа в строке.
Короткое имя:fd.
Полное имя:find.
Аргументы:std::string,char.
Возвращаемое значение:std::size_t(номер символа в строке).
В случае, если символ не нашелся, нужно выбросить исключение. -
Определение длины строки.
Короткое имя:len.
Полное имя:length.
Аргументы:std::string.
Возвращаемое значение:std::size_t. -
Получение символа по индексу.
Короткое имя:at.
Полное имя:atindex.
Аргументы:std::string,std::size_t.
Возвращаемое значение:char.
При превышении индексом длины строки нужно выбросить исключение.
Места, где в коде нужно внести изменения, помечены комментариями TODO:
// TODO: добавьте классы командПо желанию можно написать юнит-тесты.