Strengesøkealgoritmen brukes til å finne forekomster av et spesifikt mønster(understreng) i en større tekst(streng). Denne algoritmen spiller en avgjørende rolle i tekstbehandling, søk og manipulasjonsoppgaver.
Hvordan det fungerer
- Start med en tekst(streng) og et mønster(delstreng) å søke etter.
- Iterér gjennom teksten ett tegn om gangen.
- For hvert tegn i teksten, sammenligne det med det første tegnet i mønsteret.
- Hvis det er samsvar, sjekk om de påfølgende tegnene også samsvarer med mønsteret.
- Hvis mønsteret er helt samsvarende, noter startposisjonen til kampen.
- Fortsett å søke etter mønsteret i teksten.
Eksempel
Tenk på en tekst: "ababcababcabcabc" og et mønster: "abc"
- Start ved posisjon 0. Sammenlign "a" med det første tegnet "a" i mønsteret.
- Samsvar funnet, gå til neste tegn: "b" med "b", og "a" med "c".
- Fortsett å matche: "b" med "a", "a" med "b" og "b" med "c".
- Kamp mislyktes på posisjon 2.
- Start på nytt ved posisjon 3. Sammenlign "a" med det første tegnet "a" i mønsteret.
- Vellykket samsvar: "a" med "a", "b" med "b" og "c" med "c".
- Rekordposisjon 3.
Mønsteret "abc" finnes i posisjonene 0, 6 og 9.
Eksempelkode i 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;
}
I dette eksemplet stringSearch
brukes funksjonen til å finne forekomster av mønsteret "abc" i teksten "ababcababcabcabc". Resultatet vil være en vektor som inneholder startposisjonene til kampene.