इनपुट के रूप में दो स्ट्रिंग्स स्ट्र और सबस्ट्र को देखते हुए। लक्ष्य यह पता लगाना है कि सबस्ट्रिंग में मौजूद टेक्स्ट स्ट्र में सबस्ट्रिंग के रूप में मौजूद है या नहीं। स्ट्रिंग एक्स को वाई का सबस्ट्रिंग कहा जाता है यदि पूरा एक्स कम से कम एक बार वाई में मौजूद है। हम ऐसा करने के लिए एक पुनरावर्ती दृष्टिकोण का उपयोग करेंगे।
उदाहरण के लिए
इनपुट - स्ट्र ="ट्यूटोरियल पॉइंट" सबस्ट्र ="प्वाइंट"
आउटपुट − दिए गए स्ट्रिंग में सबस्ट्रिंग शामिल नहीं है!
स्पष्टीकरण − स्ट्रिंग पॉइंट ट्यूटोरियल पॉइंट का सबस्ट्रिंग नहीं है
इनपुट - स्ट्र ="वैश्वीकरण" सबस्ट्र ="वैश्विक"
आउटपुट - दिए गए स्ट्रिंग में सबस्ट्रिंग शामिल है!
स्पष्टीकरण - स्ट्रिंग ग्लोबल वैश्वीकरण का विकल्प है
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
इस दृष्टिकोण में हम जांचते हैं कि subStr एक पुनरावर्ती तरीके से Str को प्रतिस्थापित कर रहा है या नहीं। रिकर्सन के चरण होंगे:-
-
1. दोनों स्ट्रिंग्स को एक पुनरावर्ती फ़ंक्शन में पास करें जहां पॉइंटर्स दोनों स्ट्रिंग्स की वर्तमान वर्ण स्थिति को इंगित करेंगे
-
यदि स्ट्रिंग समाप्त हो गई है लेकिन पैटर्न में अधिक वर्ण शेष हैं, तो पैटर्न नहीं मिला के रूप में 0 लौटाएं और हम स्ट्रिंग के अंत में पहुंच गए।
-
यदि वर्तमान वर्ण पैटर्न में अंतिम वर्ण है तो यह स्ट्रिंग में पाया जाता है, 1 लौटाएं।
-
यदि दोनों वर्तमान वर्ण समान हैं, तो दोनों बिंदुओं को अगले स्थान पर ले जाएँ।
-
यदि दोनों वर्तमान वर्ण मेल नहीं खाते हैं, तो स्ट्रिंग के लिए पॉइंटर को अगली स्थिति में ले जाएँ।
-
इनपुट स्ट्रिंग्स को वर्ण सरणियों Str और subStr के रूप में लें।
-
फंक्शन मैच(char *str1, char *substr1) दो सबस्ट्रिंग लेता है और 1 लौटाता है यदि सबस्ट्र 1 और स्ट्र1 समान हैं।
-
दोनों पॉइंटर्स स्ट्रिंग्स में मौजूद कैरेक्टर्स की ओर इशारा करते हैं, शुरू में शुरुआती पोजीशन पर।
-
अगर सबस्ट्र खाली है, तो 0 वापस करें।
-
यदि दोनों तार खाली हैं, तो 0 भी वापस करें।
-
यदि दोनों वर्तमान वर्ण समान हैं, तो मिलान (str1 + 1, substr1 + 1)
का उपयोग करके अगले वर्णों की पुनरावर्ती जाँच करें। -
फ़ंक्शन checksubString(char *str2, char *substr2) दोनों तार लेता है और अगर substr2 str2 में मौजूद है तो 1 लौटाता है।
-
यदि str2 और substr2 द्वारा इंगित वर्तमान वर्ण समान हैं, तो जांचें कि क्या लगातार वर्ण भी मिलान () फ़ंक्शन का उपयोग करके मेल खाते हैं। अगर यह 1 लौटाता है तो 1 लौटाएं।
-
यदि str2 के अंत तक पहुँच गया है तो 0 पर लौटें।
-
अन्यथा checksubString(str2 + 1, substr2) का उपयोग करके str2 के अगले वर्ण के लिए पुनरावर्ती रूप से जाँच करें;
-
यदि सभी स्थितियां विफल हो जाती हैं, तो चेकसबस्ट्रिंग (str2 + 1, सबस्ट्र 2) का उपयोग करके पुनरावर्ती रूप से जांचें;
-
वापसी मूल्य के अनुसार परिणाम प्रिंट करें।
उदाहरण
#include<iostream> using namespace std; int match(char *str1, char *substr1){ if (*substr1 == '\0'){ return 1; } if (*str1 == '\0'){ if(*substr1 != '\0'){ return 0; } } if (*str1 == *substr1){ return match(str1 + 1, substr1 + 1); } return 0; } int checksubString(char *str2, char *substr2){ if (*str2 == *substr2){ if(match(str2, substr2)){ return 1; } } if (*str2 == '\0'){ return 0; } else{ return checksubString(str2 + 1, substr2); } return checksubString(str2 + 1, substr2); } int main(){ char Str[]="tutorialspoint"; char subStr[]="point"; if(checksubString(Str,subStr)==1){ cout << "Given string contains substring!"; } else{ cout << "Given string does not contain substring!"; } return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा
Given string contains substring!