Professional Documents
Culture Documents
KMP
KMP
KMP
#include <iostream>
#include <string>
using namespace std;
int main()
{
string recenica;
cout << "Uneti jednu recenicu: \n";
getline(cin,recenica);
if (recenica.find("macka") != string::npos)
cout << "Recenica sadrzi rec macka!";
else
cout << "Recenica ne sadrzi rec macka!";
}
2. Написати програм који исписује све делове у реченици које почињу словом а све до краја
реченице.
#include <iostream>
#include <string>
using namespace std;
int main()
{
//Unos recenice
string recenica;
cout << "Uneti jednu recenicu: \n";
getline(cin, recenica);
//Pronalazak svih delova recenice koje pocinju slovom a
int i = 0;
while ((i = recenica.find('a', i)) != string::npos)
{
// Ispisivanje podstringa
cout << recenica.substr(i)<<endl;
i++;
}
}
3. Написати програм којим се за две дате речи проверава да ли је друга садржана у првој, ако
јесте одредити прву позицију на којој се друга реч појављјује у првој.
Пример 1
Улаз
банана
ана
Излаз
1
Пример 2
Улаз
бранко
ана
Излаз
-1
I начин:
Можемо да искористимо готову методу и да прво појављивање нађемо помоћу библиотечне
методе find.
#include <iostream>
#include <string>
using namespace std;
int main()
{
//Ucitavamo reci
string prvarec;
string drugarec;
cout << "Uneti prvu rec: \n";
getline(cin, prvarec);
cout << "Uneti drugu rec: \n";
getline(cin, drugarec);
//Trazimo i ispisujemo poziciju pojavljivanja druge reci unutar prve
if (prvarec.find(drugarec) != string::npos)
cout << prvarec.find(drugarec);
else
cout << -1;
}
II начин:
Можемо да урадимо и „пешке“ алгоритам коришћењем грубе силе.
#include <iostream>
#include <string>
using namespace std;
III начин:
Овај проблем можемо решавати и много ефикаснијим специјализованим алгоритмом какав је
Кнут-Морис-Прат (КМП) алгоритам.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void main()
{
// ucitavamo reci
string prvaRec, drugaRec;
cout << "Uneti prvu rec: \n";
getline(cin, prvaRec);
cout << "Uneti drugu rec: \n";
getline(cin, drugaRec);
// trazimo i ispisujemo poziciju pojavljivanja druge reci unutar prve
cout<<KMP(drugaRec, prvaRec);
}
https://cmps-people.ok.ubc.ca/ylucet/DS/KnuthMorrisPratt.html
https://www.geeksforgeeks.org/kmp-algorithm-for-pattern-searching/