تُستخدم خوارزمية البحث عن سلسلة للعثور على تكرارات نمط معين(سلسلة فرعية) داخل نص أكبر(سلسلة). تلعب هذه الخوارزمية دورًا مهمًا في مهام معالجة النصوص والبحث والمعالجة.
كيف تعمل
- ابدأ بنص(سلسلة) ونمط(سلسلة فرعية) للبحث عنه.
- كرر خلال النص حرفًا واحدًا في كل مرة.
- لكل حرف في النص ، قارنه بالحرف الأول من النمط.
- إذا كان هناك تطابق ، فتحقق مما إذا كانت الأحرف التالية تتطابق أيضًا مع النمط.
- إذا كان النمط مطابقًا تمامًا ، فقم بتسجيل موضع البداية للمباراة.
- استمر في البحث عن النمط في النص.
مثال
النظر في نص: "ababcabcabcabc" ونمط: "abc"
- ابدأ من الموضع 0. قارن "أ" بالحرف الأول "أ" في النمط.
- تم العثور على تطابق ، انتقل إلى الأحرف التالية: "ب" مع "ب" ، و "أ" مع "ج".
- استمر في المطابقة: "b" مع "a" ، و "a" مع "b" ، و "b" مع "c".
- فشلت المباراة في الموضع 2.
- ابدأ مرة أخرى في الموضع 3. قارن "أ" بالحرف الأول "أ" في النمط.
- مطابقة ناجحة: "a" مع "a" و "b" مع "b" و "c" مع "c".
- سجل الموقف 3.
تم العثور على النمط "abc" في المواضع 0 و 6 و 9.
رمز المثال في 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;
}
في هذا المثال ، stringSearch
تُستخدم الوظيفة للعثور على تكرارات النمط "abc" داخل النص "ababcabcabcabc". ستكون النتيجة متجهًا يحتوي على مواضع البداية للمباريات.