Skip to content

cppdevcourse/exam-repl

Repository files navigation

Билет №4. REPL-библиотека

В этом билете необходимо будет, используя и дорабатывая готовую библиотеку для 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: добавьте классы команд

По желанию можно написать юнит-тесты.

About

Билет экзамена #4, REPL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors