Algoritam pretraživanja niza koristi se za pronalaženje pojavljivanja određenog uzorka(podniza) unutar većeg teksta(niza). Ovaj algoritam ima ključnu ulogu u zadacima obrade teksta, pretraživanja i manipulacije.
Kako radi
- Započnite s tekstom(string) i uzorkom(podstring) za traženje.
- Iterirajte kroz tekst jedan po jedan znak.
- Za svaki znak u tekstu usporedite ga s prvim znakom uzorka.
- Ako postoji podudaranje, provjerite odgovaraju li i sljedeći znakovi uzorku.
- Ako je uzorak potpuno usklađen, zabilježite početnu poziciju podudaranja.
- Nastavite tražiti uzorak u tekstu.
Primjer
Razmotrimo tekst: "ababcababcabcabc" i uzorak: "abc"
- Počnite od pozicije 0. Usporedite "a" s prvim znakom "a" u uzorku.
- Podudaranje pronađeno, prijeđite na sljedeće znakove: "b" s "b" i "a" s "c".
- Nastavite spajati: "b" s "a", "a" s "b" i "b" s "c".
- Podudaranje nije uspjelo na poziciji 2.
- Počnite ponovno od pozicije 3. Usporedite "a" s prvim znakom "a" u uzorku.
- Uspješno podudaranje: "a" s "a", "b" s "b" i "c" s "c".
- Snimite poziciju 3.
Uzorak "abc" nalazi se na pozicijama 0, 6 i 9.
Primjer koda u C++
#include <iostream>
#include <string>
#include <vector>
std::vector<int> stringSearch(const std::string& text, const std::string& pattern) {
std::vector<int> positions;
for(int i = 0; i <= text.length()- pattern.length(); ++i) {
int j = 0;
while(j < pattern.length() && text[i + j] == pattern[j]) {
++j;
}
if(j == pattern.length()) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::string text = "ababcababcabcabc";
std::string pattern = "abc";
std::vector<int> result = stringSearch(text, pattern);
std::cout << "Pattern found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
U ovom primjeru, stringSearch
funkcija se koristi za pronalaženje pojavljivanja uzorka "abc" unutar teksta "ababcababcabcabc". Rezultat će biti vektor koji sadrži početne pozicije utakmica.