Strengsøgningsalgoritmen bruges til at finde forekomster af et specifikt mønster(understreng) i en større tekst(streng). Denne algoritme spiller en afgørende rolle i tekstbehandlings-, søgnings- og manipulationsopgaver.
Hvordan det virker
- Start med en tekst(streng) og et mønster(understreng) at søge efter.
- Gentag teksten et tegn ad gangen.
- For hvert tegn i teksten skal du sammenligne det med det første tegn i mønsteret.
- Hvis der er et match, så tjek om de efterfølgende tegn også matcher mønsteret.
- Hvis mønsteret er helt matchet, skal du registrere kampens startposition.
- Fortsæt med at søge efter mønsteret i teksten.
Eksempel
Overvej en tekst: "ababcababcabcabc" Og et mønster: "abc"
- Start ved position 0. Sammenlign "a" med det første tegn "a" i mønsteret.
- Match fundet, flyt til de næste tegn: "b" med "b", og "a" med "c".
- Fortsæt med at matche: "b" med "a", "a" med "b" og "b" med "c".
- Kamp mislykkedes på position 2.
- Start igen ved position 3. Sammenlign "a" med det første tegn "a" i mønsteret.
- Vellykket match: "a" med "a", "b" med "b" og "c" med "c".
- Optag position 3.
Mønsteret "abc" findes på positionerne 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 eksempel stringSearch
bruges funktionen til at finde forekomster af mønsteret "abc" i teksten "ababcababcabcabc". Resultatet vil være en vektor, der indeholder startpositionerne for kampene.