Algoritmi i kërkimit të vargut përdoret për të gjetur dukuritë e një modeli specifik(nënstring) brenda një teksti(string) më të madh. Ky algoritëm luan një rol vendimtar në detyrat e përpunimit, kërkimit dhe manipulimit të tekstit.
Si punon
- Filloni me një tekst(string) dhe një model(nënstring) për të kërkuar.
- Përsëriteni nëpër tekst një karakter në një kohë.
- Për çdo karakter në tekst, krahasojeni atë me karakterin e parë të modelit.
- Nëse ka një përputhje, kontrolloni nëse karakteret e mëvonshme gjithashtu përputhen me modelin.
- Nëse modeli përputhet plotësisht, regjistroni pozicionin e fillimit të ndeshjes.
- Vazhdoni të kërkoni për modelin në tekst.
Shembull
Merrni parasysh një tekst: "ababcababcabcabc" dhe një model: "abc"
- Filloni në pozicionin 0. Krahasoni "a" me karakterin e parë "a" në model.
- Përputhja e gjetur, kaloni te karakteret vijuese: "b" me "b" dhe "a" me "c".
- Vazhdoni të përputheni: "b" me "a", "a" me "b" dhe "b" me "c".
- Ndeshja dështoi në pozicionin 2.
- Filloni përsëri në pozicionin 3. Krahasoni "a" me karakterin e parë "a" në model.
- Përputhja e suksesshme: "a" me "a", "b" me "b" dhe "c" me "c".
- Regjistroni pozicionin 3.
Modeli "abc" gjendet në pozicionet 0, 6 dhe 9.
Shembull Kodi 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ë këtë shembull, stringSearch
funksioni përdoret për të gjetur dukuritë e modelit "abc" brenda tekstit "ababcababcabcabc". Rezultati do të jetë një vektor që përmban pozicionet fillestare të ndeshjeve.