यह एक ही टेक्स्ट को बार-बार खोजने के लिए एक C++ प्रोग्राम है।
एल्गोरिदम
Begin
मूल स्ट्रिंग और खोजे जाने वाले पैटर्न को इनपुट के रूप में लें।
org_len = मूल स्ट्रिंग की लंबाई स्टोर करें
pat_len = पैटर्न की लंबाई स्टोर करें
for i = 0 से (org_len - pat_len) तक
for j = 0 से pat_len - 1 तक
यदि (org[i + j] != patt[j]) तो ब्रेक
यदि (j == pat_len) तो
m बढ़ाएं।
पैटर्न मिलने की स्थिति प्रिंट करें
यदि (m == 0) तो
कोई मैच नहीं मिला प्रिंट करें
अन्यथा
मिले कुल इंस्टेंसेस की संख्या प्रिंट करें।
return 0
End
उदाहरण
#include <iostream>
#include <string.h>
using namespace std;
int main() {
char org[150], patt[150];
int i, j, m = 0, org_len, pat_len;
cout << "\nEnter Original String: ";
cin >> org;
cout << "Enter Pattern to Search: ";
cin >> patt;
org_len = strlen(org); // मूल स्ट्रिंग की लंबाई स्टोर करें
pat_len = strlen(patt); // पैटर्न की लंबाई स्टोर करें
for(i = 0; i <= (org_len - pat_len); i++) {
for(j = 0; j < pat_len; j++) {
if(org[i + j] != patt[j])
break;
}
if(j == pat_len) {
m++;
cout << "\nPattern Found at Position: " << i;
}
}
if(m == 0)
cout << "\nNo Match Found.";
else
cout << "\nTotal Number of Instances Found = " << m;
return 0;
}
आउटपुट
Enter Original String: thisistutorialspoint.thisisac++program Enter Pattern to Search: is Pattern Found at Position: 2 Pattern Found at Position: 4 Pattern Found at Position: 23 Pattern Found at Position: 25 Total Number of Instances Found = 4
यह नैव स्ट्रिंग मैचिंग एल्गोरिदम (ब्रूट फोर्स) है जिसकी समय जटिलता O(n*m) है जहां n टेक्स्ट लंबाई है और m पैटर्न लंबाई है। बार-बार खोज के लिए, KMP, बॉयर-मूर, या सफिक्स ट्री/सफिक्स ऐरे जैसे डेटा स्ट्रक्चर्स अधिक कुशल होते हैं। शीर्षक "डेटा स्ट्रक्चर बनाकर" का सुझाव देता है लेकिन कार्यान्वयन नैव दृष्टिकोण का उपयोग करता है।