• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Несложный вопрос по алгоритму

  • Автор темы Автор темы tenx
  • Дата начала Дата начала

tenx

Ученик
Почётный участник
Регистрация
24 Мар 2009
Сообщения
185
Реакции
2
Баллы
0
Несложный вопрос по алгоритму

#include <iostream>
using namespace std;
int main()
{
char T[40000],S[10000];
int j,n,m,v=0,w=0,k=1,P = 9941,D=256;
/*
Ввод текста и образца
*/
for(int i=1;i<=m;i++)
{
v=(v*D+(int)S)%P;
w=(w*D+(int)T)%P;
}
for(int i=1;i<=m-1;i++)
k=(k*D)%P;//k имеет значение остатка деления Dm-1 на P<br />
for(int i=m+1;i<=n+1;i++)
{
if(w==v){j=0;//если числа равны, то строки принадлежат одному классу, и надо проверить совпадают ли они
while((j<m)&(S[j+1]==T[i-m+j])){j++;}
if(j==m) cout << "Образец входит в текст начиная с" <<i-m<<"-го символа";//окончательная проверка
}
if(i<=n) w=(D*(w+P-(((int)T[i-m])*k)%P))+(((int)T)%P);
}
return 0;
}


Это Алгоритм Рабина-Карпа. Вопрос как дополнить программу, чтобы можно было вводить текст и искомую строку, сейчас в программе этого не реализованно.
 
Немного не понял что надо...
Что ввести? В какую переменную?
 
Назад
Сверху