Algoritma carian rentetan digunakan untuk mencari kejadian corak tertentu(subrentetan) dalam teks yang lebih besar(rentetan). Algoritma ini memainkan peranan penting dalam pemprosesan teks, pencarian dan tugasan manipulasi.
Bagaimana ia berfungsi
- Mulakan dengan teks(rentetan) dan corak(subrentetan) untuk dicari.
- Lelaran melalui teks satu aksara pada satu masa.
- Untuk setiap aksara dalam teks, bandingkan dengan aksara pertama corak.
- Jika terdapat padanan, semak sama ada aksara seterusnya juga sepadan dengan corak.
- Jika corak dipadankan sepenuhnya, rekod kedudukan permulaan perlawanan.
- Teruskan mencari corak dalam teks.
Contoh
Pertimbangkan teks: "ababcababcabcabc" Dan corak: "abc"
- Mulakan pada kedudukan 0. Bandingkan "a" dengan aksara pertama "a" dalam corak.
- Padanan ditemui, beralih ke aksara seterusnya: "b" dengan "b", dan "a" dengan "c".
- Teruskan memadankan: "b" dengan "a", "a" dengan "b", dan "b" dengan "c".
- Perlawanan gagal di kedudukan 2.
- Mulakan semula pada kedudukan 3. Bandingkan "a" dengan aksara pertama "a" dalam corak.
- Padanan yang berjaya: "a" dengan "a", "b" dengan "b", dan "c" dengan "c".
- Kedudukan rekod 3.
Corak "abc" ditemui pada kedudukan 0, 6, dan 9.
Contoh Kod dalam 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;
}
Dalam contoh ini, stringSearch
fungsi digunakan untuk mencari kejadian corak "abc" dalam teks "ababcababcabcabc". Keputusan akan menjadi vektor yang mengandungi kedudukan permulaan perlawanan.