Задача 1. Подсчёт фраз
Задача разбить заданный текст на фразы подсчитать количество раз, которое встречается каждая фраза, вывести фразы, которые встречаются более одного раза (или указанного количества раз) в порядке убывания частоты встречаемости.
Пример
Текст the quick brown fox jumps over the lazy dog
разбивается на следующие фразы длины 2: the quick
, quick brown
, brown fox
, fox jumps
, jumps over
, over the
, the lazy
, lazy dog
. (никакая из этих не повторяется больше одного раза, хотя слово the встречается дважды).
Технические требования
В качестве решения должно быть ркализовано консольное приложение (например, с именем phrases
). Формат вывода программы: каждая строка содержит фразу и количество раз, которое она встречается в скобках, например:
hello world (23)
one two (11)
Программа умеет работать с текстом из указанного файла, или со стандартным потоком ввода, если в качестве имени файла указан -
.
Если имя файла не указано, то программа также работает со стандартным потоком ввода.
$> phrases words.txt
hello world (23)
one two (11)
$> phrases -
n the town where I was born
Lived a man who sailed to sea
And he told us of his life
In the land of submarines
In the (2)
Программа должна поддерживать опциональные (необязательные) аргументы: - -n - длина фразы (в словах) (по-умолчанию 2). - -m - минимальное количество повторов, при котором фразу нужно выводить на экран (по-умолчанию 2).
Пример:
$> phrases -n 3 -m 4 -
we all live in a yellow submarine
yellow submarine yellow submarine
we all live in a yellow submarine
yellow submarine yellow submarine
submarine yellow submarine (4)
yellow submarine yellow (4)
Тестирование
Для ключевого функционала программы необходимо написать юнит-тесты. Рекомендуется использовать одну из библиотек для юнит-тестирования под C++, например Catch (проще в плане использования).
Сборка проекта
Для сборки проекта рекомендуется использовать системы сборки gnu make (на OS Linux), или cmake
(кросс-платформенный).
Использование репозитория
Для того, чтобы задача была засчитана как выполненная, код программы должен быть загружен в репозиторий. Репозиторий должен содержать следующее: - Исходный код программы (h и cpp файлы). - Юнит-тесты. - Конфигурационные файлы для сборки проекта (Makefile, CMakeLists ...). - [опционально] краткое описание программы в файле README.md
Крайне не рекомендуется загружать в репозиторий результаты сборки (исполняемые файлы, объектные файлы, временные файлы, созданные в процессе компиляции и т.д.).