Algoritma pencarian string digunakan untuk menemukan kemunculan pola tertentu(substring) di dalam teks(string) yang lebih besar. Algoritma ini memainkan peran penting dalam pemrosesan teks, pencarian, dan tugas manipulasi.
Bagaimana itu bekerja
- Mulailah dengan teks(string) dan pola(substring) untuk dicari.
- Ulangi melalui teks satu karakter pada satu waktu.
- Untuk setiap karakter dalam teks, bandingkan dengan karakter pertama dari pola.
- Jika ada kecocokan, periksa apakah karakter selanjutnya juga cocok dengan polanya.
- Jika pola benar-benar cocok, catat posisi awal pertandingan.
- Lanjutkan mencari pola dalam teks.
Contoh
Perhatikan sebuah teks: "ababcababcabcabc" Dan sebuah pola: "abc"
- Mulai dari posisi 0. Bandingkan "a" dengan karakter pertama "a" dalam pola.
- Kecocokan ditemukan, pindah ke karakter berikutnya: "b" dengan "b", dan "a" dengan "c".
- Lanjutkan mencocokkan: "b" dengan "a", "a" dengan "b", dan "b" dengan "c".
- Pertandingan gagal di posisi 2.
- Mulai lagi dari posisi 3. Bandingkan "a" dengan karakter pertama "a" pada pola.
- Pertandingan yang berhasil: "a" dengan "a", "b" dengan "b", dan "c" dengan "c".
- Rekam posisi 3.
Pola "abc" ditemukan pada posisi 0, 6, dan 9.
Contoh Kode di 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 menemukan kemunculan pola "abc" di dalam teks "ababcababcabcabc". Hasilnya adalah vektor yang berisi posisi awal pertandingan.