Conversation
|
Сейчас заметил, что допустил ошибку. В GitHub Actions проект собирается без тестов. Запушил исправление в ветку Инструкция: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork |
| std::vector<int> lps(m); | ||
|
|
||
| int len = 0; | ||
| lps[0] = 0; |
There was a problem hiding this comment.
Поторопились вектор использовать, мы его еще не проходили) Если ваш код запустить, то получим обращение к неинициализированной памяти.
Оператор [] не выделяет память для новых элементов. Раз уж начали использовать вектор, то советую ознакомиться:
- https://en.cppreference.com/w/cpp/container/vector.html
- https://en.cppreference.com/w/cpp/container/vector/push_back.html
- https://en.cppreference.com/w/cpp/container/vector/resize.html
Но вообще задание решается спокойно и без динамической памяти.
There was a problem hiding this comment.
Проглядел передачу размера в вектор. Нет обращения к неициализированной памяти, ошибся
czertyaka
left a comment
There was a problem hiding this comment.
Задание принято! PR вливать не нужно. Замечания минорные, половина из них отпала когда я узнал алгоритм KMP
| return; | ||
| } | ||
|
|
||
| int m = 0; |
There was a problem hiding this comment.
Переменным лучше давать более осмысленные имена. В продакшн коде однобуквенные названия — моветон (у математиков и научных сотрудников только так принято)
|
|
||
| int m = 0; | ||
| const char* temp = secret; | ||
| while (*temp != '\0') { |
There was a problem hiding this comment.
Для определения длины строки можно воспользоваться std::strlen. Она примерно то же самое делает
| return; | ||
| } | ||
|
|
||
| std::vector<int> lps(m); |
There was a problem hiding this comment.
Тут тоже лучше другое имя придумать. Понятно, что можно разобраться в назначении объекта, прочитав код дальше, но гораздо лучше, когда все сразу понятно в момент объявления объекта.
There was a problem hiding this comment.
Я понял, почему вы такие имена выбрали) У вас алгоритм Кнута-Морриса-Пратта.
|
|
||
| int m = 0; | ||
| const char* temp = secret; | ||
| while (*temp != '\0') { |
There was a problem hiding this comment.
Вот этот цикл можно было организовать проще (если не заменять на std::strlen):
int m = 0;
for (; secret[m] != '\0'; ++m) {}Исчезла необходимость в переменной temp и снизилась когнитивная нагрузка кода
No description provided.