Algoritmul de căutare de șiruri este utilizat pentru a găsi aparițiile unui anumit model(subșir) într-un text mai mare(șir). Acest algoritm joacă un rol crucial în procesarea textului, căutarea și sarcinile de manipulare.
Cum functioneaza
- Începeți cu un text(șir) și un model(subșir) de căutat.
- Repetați textul câte un caracter.
- Pentru fiecare caracter din text, comparați-l cu primul caracter al modelului.
- Dacă există o potrivire, verificați dacă și caracterele ulterioare se potrivesc cu modelul.
- Dacă modelul este complet potrivit, înregistrați poziția de început a meciului.
- Continuați să căutați modelul în text.
Exemplu
Luați în considerare un text: „ababcababcabcabc” și un model: „abc”
- Începeți de la poziția 0. Comparați „a” cu primul caracter „a” din model.
- Potrivire găsită, treceți la următoarele caractere: „b” cu „b” și „a” cu „c”.
- Continuați potrivirea: „b” cu „a”, „a” cu „b” și „b” cu „c”.
- Meciul a eșuat la poziția 2.
- Începeți din nou de la poziția 3. Comparați „a” cu primul caracter „a” din model.
- Potrivire reușită: „a” cu „a”, „b” cu „b” și „c” cu „c”.
- Poziția de înregistrare 3.
Modelul „abc” se găsește la pozițiile 0, 6 și 9.
Exemplu de cod în 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;
}
În acest exemplu, stringSearch
funcția este utilizată pentru a găsi aparițiile modelului „abc” în textul „ababcababcabcabc”. Rezultatul va fi un vector care conține pozițiile de început ale meciurilor.