Strängsökningsalgoritmen används för att hitta förekomster av ett specifikt mönster(delsträng) i en större text(sträng). Denna algoritm spelar en avgörande roll i textbearbetnings-, söknings- och manipuleringsuppgifter.
Hur det fungerar
- Börja med en text(sträng) och ett mönster(delsträng) att söka efter.
- Iterera genom texten ett tecken i taget.
- För varje tecken i texten, jämför det med det första tecknet i mönstret.
- Om det finns en matchning, kontrollera om de efterföljande tecknen också matchar mönstret.
- Om mönstret är helt matchat, registrera startpositionen för matchen.
- Fortsätt att söka efter mönstret i texten.
Exempel
Tänk på en text: "ababcababcabcabc" och ett mönster: "abc"
- Börja vid position 0. Jämför "a" med det första tecknet "a" i mönstret.
- Matchning hittades, flytta till nästa tecken: "b" med "b" och "a" med "c".
- Fortsätt matcha: "b" med "a", "a" med "b" och "b" med "c".
- Matchen misslyckades på plats 2.
- Börja igen vid position 3. Jämför "a" med det första tecknet "a" i mönstret.
- Lyckad matchning: "a" med "a", "b" med "b" och "c" med "c".
- Rekordposition 3.
Mönstret "abc" finns på positionerna 0, 6 och 9.
Exempelkod 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 detta exempel stringSearch
används funktionen för att hitta förekomster av mönstret "abc" i texten "ababcababcabcabc". Resultatet blir en vektor som innehåller startpositionerna för matcherna.