A szövegkereső algoritmus a szövegfeldolgozás és információ-visszakeresés alapvető módszere. Ez az algoritmus lehetővé teszi számunkra, hogy megkeressük és azonosítsuk egy részkarakterlánc(vagy minta) előfordulásait egy nagyobb szövegrészen belül.
Hogyan működik
- Kezdje egy nagyobb szövegrészlettel(vagy dokumentummal) és a keresendő részkarakterlánccal.
- Iteráld végig a szöveg minden karakterét egymás után.
- Hasonlítsa össze az alkarakterláncot a szöveg egy részével, amelynek hossza megegyezik az alkarakterlánccal. Ha talál egyezést, rögzítse az aktuális pozíciót.
- Lépjen a következő pozícióra, és folytassa az összehasonlítást.
Példa
Fontolja meg a szöveget: "Keressünk egy részkarakterláncot ebben a szövegben, hogy lássuk, hogyan működik az algoritmus."
És a keresendő részkarakterlánc: "substring"
- Kezdje a 0. pozícióban. Hasonlítsa össze
Let'az "alkarakterlánccal". Nem egyezik. - Lépjen az 1. pozícióba. Hasonlítsa össze
et'saz "alkarakterlánccal". Nem egyezik. - Lépjen a 2. pozícióba. Hasonlítsa össze
t'sa " karakterláncot " az "alkarakterlánccal". Nincs egyezés. - Lépjen a 3. pozícióba. Hasonlítsa össze
's saz "alkarakterlánccal". Nem egyezik. - Lépjen a 4. pozícióba. Hasonlítsa össze
seaz "alkarakterlánccal". Nem egyezik. - Lépjen az 5. pozícióba. Hasonlítsa össze
seaaz "alkarakterlánccal". Nem egyezik. - Lépjen a 6. pozícióba. Hasonlítsa össze
earcaz "alkarakterlánccal". Nem egyezik. - Lépjen a 7. pozícióba. Hasonlítsa össze
archaz "alkarakterlánccal". Nem egyezik. - Lépjen a 8. pozícióba. Hasonlítsa össze
rcha " részt az "alkarakterlánccal". Nincs egyezés. - Lépjen a 9. pozícióba. Hasonlítsa össze
ch waz "alkarakterlánccal". Nem egyezik. - Lépjen a 10. pozícióba. Hasonlítsa össze
h wiaz "alkarakterlánccal". Nem egyezik. - Lépjen a 11. pozícióba. Hasonlítsa össze a "
witrészt az "alkarakterlánccal". Nincs egyezés. - Lépjen a 12. pozícióba. Hasonlítsa össze
withaz "alkarakterlánccal". Nem egyezik. - Lépjen a 13. pozícióba. Hasonlítsa össze
ithiaz "alkarakterlánccal". Nem egyezik. - Lépjen a 14. pozícióba. Hasonlítsa össze
thinaz "alkarakterlánccal". Nem egyezik. - Lépjen a 15. pozícióba. Hasonlítsa össze
hinnaz "alkarakterlánccal". Nem egyezik. - Lépjen a 16. pozícióba. Hasonlítsa össze
in taz "alkarakterlánccal". Nem egyezik. - Lépjen a 17. pozícióba. Hasonlítsa össze
n thaz "alkarakterlánccal". Nem egyezik. - Lépjen a 18. pozícióba. Hasonlítsa össze a "
thirészt az "alkarakterlánccal". Nincs egyezés. - Lépjen a 19. pozícióba. Hasonlítsa össze
thisaz "alkarakterlánccal". Nem egyezik. - Lépjen a 20. pozícióba. Hasonlítsa össze
hisa " részt az "alkarakterlánccal". Nincs egyezés. - Lépjen a 21. pozícióba. Hasonlítsa össze
is taz "alkarakterlánccal". Nem egyezik. - Lépjen a 22. pozícióba. Hasonlítsa össze
s teaz "alkarakterlánccal". Nem egyezik. - Lépjen a 23. pozícióba. Hasonlítsa össze
ubstaz "alkarakterlánccal". Nem egyezik. - Lépjen a 24. pozícióba. Hasonlítsa össze
bstraz "alkarakterlánccal". Nem egyezik. - Lépjen a 25. pozícióba. Hasonlítsa össze
streaz "alkarakterlánccal". Nem egyezik. - Lépjen a 26. pozícióba. Hasonlítsa össze
trinaz "alkarakterlánccal". Nem egyezik. - Lépjen a 27. pozícióba. Hasonlítsa össze
ringaz "alkarakterlánccal". Talált egyezést, rekordpozíció 27.
Az "alkarakterlánc" a szöveg 27. pozíciójában található.
Példakód C++ nyelven
#include <iostream>
#include <string>
#include <vector>
std::vector<int> textSearch(const std::string& text, const std::string& query) {
std::vector<int> positions;
for(int i = 0; i <= text.length()- query.length(); ++i) {
int j = 0;
while(j < query.length() && text[i + j] == query[j]) {
++j;
}
if(j == query.length()) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::string text = "Let's search for a substring within this text to see how the algorithm works.";
std::string query = "substring";
std::vector<int> result = textSearch(text, query);
std::cout << "Substring found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
Ebben a példában a textSearch függvény a "substring" részkarakterlánc pozícióinak megkeresésére szolgál a szövegben. Az eredmény egy vektor lesz, amely a mérkőzések kezdőpontjait tartalmazza.

