|
0 / 0 / 0
Регистрация: 07.12.2022
Сообщений: 1
|
|
Алгоритм КМП20.12.2022, 22:20. Показов 410. Ответов 0
Метки нет (Все метки)
Всех приветствую! Есть такой код: создается файл и записывается в него строка. Далее, с помощью алгоритма КМП программа ищет все вхождения слова, введенного с клавиатуры. А также пpoгpaммa дoлжнa cигнaлизиpoвaть, кoгдa вxoждeниe oбpaзцa oкaзывaeтcя в кoнцe тeкyщeгo пpeдлoжeния cтpoки. К сожалению не получается вывести ВСЕ вхождения слова, выводит только первого, а также непонятно как реализовать cигнaлизиpoвaние, кoгдa вxoждeниe oбpaзцa oкaзывaeтcя в кoнцe тeкyщeгo пpeдлoжeния cтpoки. Помогите пожалуйста. Заранее спасибо за помощь!
#include <fstream> #include <iostream> #include <string> using namespace std; int KMP(char* s, char* q) { int i, j; int N = strlen(s); //присваивается длина строки int M = strlen(q); //присваивается длина субстроки int* d = new int[M]; // динамический массив длины М //Вычисление префикс-функции i = 0; j = -1; d[0] = -1; //первый элемент делаем равным -1 while (i < M - 1) { while ((j >= 0) && (q[j] != q[i])) //пока j больше или равно 0 и j-тый элемент субстроки не равен //i-тому присваиваем j j-тый элемент динамического массива { j = d[j]; } i++; j++; if (q[i] == q[j]) //если i-ый элемент субстроки равен j-тому { d[i] = d[j]; //присваиваем i-тому элементу динамического массива j-тый cout << i + 1 << endl; } else // иначе { d[i] = j; //присваиваем j } } // поиск for (i = 0, j = 0; (i < N) && (j < M); i++, j++) { while ((j >= 0) && (q[j] != s[i])) // пока j >= 0 и j-ый элемент субстроки не равен i-ому { j = d[j]; //j присваивается j-ый элемент динамического массива } } //delete[] d; // освобождение памяти массива d for (i = 0; i < N; i++) if (j == M) { return i - j + 1; } else //i==N { return -1; } } int main() { setlocale(LC_CTYPE, "RUS"); ofstream txt_file("test.txt"); txt_file << "AABBCCBCABCCGGACFGG,ACBACBFGGGG. FFCCAAAACCAA. BBACFGGF! ACCBBACGFGCAGACGFAFCFFCGACFAFCAFCFCAFCAG GAFCGAFGFCACFG."; txt_file.close(); const int len = 120; char word[len], line[len]; cout << "Bвeдитe cлoвo для пoиcкa: "; cin >> word; ifstream fin("test.txt"); if (!fin) { cout << "\nOшибкa oткpытия фaйлa" << endl; return 1; } while (fin.getline(line, len)) { char* p = line; cout << "\n" << p << endl; unsigned int start_time1 = clock(); // начальное время сортировки cout << "\nИндекс начала совпадения = " << KMP(p, word); unsigned int end_time1 = clock(); // конечное время сортировки unsigned int search_time1 = end_time1 - start_time1; // итоговое время сортировки cout << "\nВремя работы программы: " << search_time1 << " млс " << endl; } //cout << "\nКоличество совпадений = " << count << endl; fin.close(); return 0; }
0
|
|
| 20.12.2022, 22:20 | |
|
Ответы с готовыми решениями:
0
Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки )
|
| 20.12.2022, 22:20 | |
|
Помогаю со студенческими работами здесь
1
Алгоритм КМП Разъясните КМП алгоритм Алгоритм Кнута, Морриса и Пратта (КМП) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|