यह एक और स्ट्रिंग मैचिंग विधि है। इस दृष्टिकोण में, हम वेक्टर्स का उपयोग करके सबस्ट्रिंग खोज रहे हैं।
C++ में हम मानक पुस्तकालय का उपयोग करके आसानी से वेक्टर्स बना सकते हैं। हम मुख्य स्ट्रिंग और खोजी जाने वाली स्ट्रिंग को एक वेक्टर के रूप में ले रहे हैं, फिर इसे मुख्य स्ट्रिंग में खोज रहे हैं। जब एक मैच मिल जाता है तो फंक्शन पता लौटाता है, और इसे मुख्य स्ट्रिंग से हटा देता है। इसलिए अगले इटरेशन में, यह स्थान 0 से शुरू होता है और फिर से खोजता है।
कई घटनाओं के लिए, हम लूप्स का उपयोग कर रहे हैं और बार-बार मैच खोज रहे हैं, और स्थिति लौटाते हैं।
Input: Main String: "ABAAABCDBBABCDDEBCABC", Pattern "ABC"
Output: Pattern found at position: 4
Pattern found at position: 10
Pattern found at position: 18
एल्गोरिदम
vector_pattern_search(main, substr)
इनपुट - मुख्य टेक्स्ट और सबस्ट्रिंग।
आउटपुट - वह स्थान जहां पैटर्न मिले हैं
Begin
p := मुख्य स्ट्रिंग का प्रारंभिक बिंदु
while r सबस्ट्रिंग के अंत पर नहीं है और p मुख्य के अंत पर नहीं है, do
r := सबस्ट्रिंग का प्रारंभ
while स्थिति p और r पर आइटम समान नहीं हैं, और p मुख्य में है, do
p := p + 1
i := i + 1
done
q := p
while स्थिति p और r पर आइटम समान हैं, और r सबस्ट्रिंग में है और p मुख्य में है, do
p := p + 1
i := i + 1
r := r + 1
done
if r सबस्ट्रिंग से अधिक है, तो
मुख्य से सबस्ट्रिंग की पहली घटना हटाएं
वह स्थिति लौटाएं जहां सबस्ट्रिंग मिला
if p मुख्य स्ट्रिंग से अधिक है, तो
0 लौटाएं
q := q + 1
p := q
done
End
उदाहरण कोड
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void take_string(vector<char> &string){
char c;
while(true){
c = getchar();
if(c == '\n'){
break;
}
string.push_back(c);
}
}
void display(vector<char> string){
for(int i = 0; i= substr.end()){
main.erase(main.begin(), q + 1);
return (i - substr.size() + 1);
}
if (p >= main.end())
return 0;
p = ++q;
}
}
आउटपुट
Enter main String: C++ is programming language. It is object oriented language
Enter substring to find: language
Match found at Position = 20
Match found at Position = 52