Algoritem iskanja po nizu se uporablja za iskanje pojavitev določenega vzorca(podniza) znotraj večjega besedila(niza). Ta algoritem igra ključno vlogo pri obdelavi besedila, iskanju in manipulaciji.
Kako deluje
- Začnite z besedilom(niz) in vzorcem(podniz) za iskanje.
- Ponavljajte besedilo en znak naenkrat.
- Za vsak znak v besedilu ga primerjajte s prvim znakom vzorca.
- Če obstaja ujemanje, preverite, ali se tudi naslednji znaki ujemajo z vzorcem.
- Če se vzorec popolnoma ujema, zabeležite začetni položaj ujemanja.
- Nadaljujte z iskanjem vzorca v besedilu.
Primer
Razmislite o besedilu: "ababcababcabcabc" In o vzorcu: "abc"
- Začnite na položaju 0. Primerjajte "a" s prvim znakom "a" v vzorcu.
- Ujemanje najdeno, premaknite se na naslednje znake: "b" z "b" in "a" s "c".
- Nadaljujte z ujemanjem: "b" z "a", "a" z "b" in "b" z "c".
- Tekma ni uspela na položaju 2.
- Začnite znova na položaju 3. Primerjajte "a" s prvim znakom "a" v vzorcu.
- Uspešno ujemanje: "a" z "a", "b" z "b" in "c" s "c".
- Posnemite položaj 3.
Vzorec "abc" se nahaja na mestih 0, 6 in 9.
Primer kode v 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;
}
V tem primeru stringSearch
se funkcija uporablja za iskanje pojavitev vzorca "abc" v besedilu "ababcababcabcabc". Rezultat bo vektor, ki vsebuje začetne položaje tekem.