Eilučių paieškos algoritmas naudojamas ieškant konkretaus šablono(poeilutės) atvejų didesniame tekste(eilutė). Šis algoritmas atlieka lemiamą vaidmenį atliekant teksto apdorojimo, paieškos ir manipuliavimo užduotis.
Kaip tai veikia
- Pradėkite nuo teksto(eilutės) ir šablono(poeilutės), kurio norite ieškoti.
- Kartokite tekstą po vieną simbolį.
- Kiekvieną teksto simbolį palyginkite su pirmuoju rašto simboliu.
- Jei yra atitiktis, patikrinkite, ar tolesni simboliai taip pat atitinka šabloną.
- Jei modelis visiškai atitinka, užrašykite pradinę rungtynių padėtį.
- Tęskite šablono paiešką tekste.
Pavyzdys
Apsvarstykite tekstą: „ababcababcabcabc“ ir modelį: „abc“
- Pradėkite nuo 0 padėties. Palyginkite „a“ su pirmuoju simboliu „a“ šablone.
- Atitiktis rasta, pereikite prie kitų simbolių: „b“ su „b“ ir „a“ su „c“.
- Tęskite derinimą: „b“ su „a“, „a“ su „b“ ir „b“ su „c“.
- Rungtynės nepavyko 2 pozicijoje.
- Pradėkite iš naujo nuo 3 pozicijos. Palyginkite „a“ su pirmuoju simboliu „a“.
- Sėkmingos rungtynės: „a“ su „a“, „b“ su „b“ ir „c“ su „c“.
- 3 įrašo pozicija.
Raštas „abc“ yra 0, 6 ir 9 pozicijose.
Kodo pavyzdys 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;
}
Šiame pavyzdyje stringSearch
funkcija naudojama šablono „abc“ atvejams rasti tekste „ababcababcabcabc“. Rezultatas bus vektorius, kuriame yra rungtynių pradinės pozicijos.