Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में उपस्ट्रिंग खोज के लिए पुनरावर्ती फ़ंक्शन


दो स्ट्रिंग्स Str और subStr इनपुट के रूप में दी गई हैं। लक्ष्य है यह ढूंढना कि subStr में मौजूद टेक्स्ट Str में उपस्ट्रिंग के रूप में मौजूद है या नहीं। स्ट्रिंग X को Y की उपस्ट्रिंग कहा जाता है यदि पूरा X कम से कम एक बार Y में मौजूद है। हम इसे करने के लिए पुनरावर्ती दृष्टिकोण का उपयोग करेंगे।

उदाहरण के लिए

इनपुट - Str = "tutorialspoint" subStr="Point"

आउटपुट - दी गई स्ट्रिंग में उपस्ट्रिंग नहीं है!

व्याख्या - स्ट्रिंग Point tutorialspoint की उपस्ट्रिंग नहीं है

इनपुट - Str = "globalization" subStr="global"

आउटपुट - दी गई स्ट्रिंग में उपस्ट्रिंग है!

व्याख्या - स्ट्रिंग global globalization की उपस्ट्रिंग है

उपयोग किया गया दृष्टिकोण

इस दृष्टिकोण में हम जांचते हैं कि क्या subStr, Str की उपस्ट्रिंग है पुनरावर्ती तरीके से। पुनरावर्तन के चरण होंगे:-

  • 1. दोनों स्ट्रिंग्स को एक पुनरावर्ती फ़ंक्शन में पास करें जहां पॉइंटर्स दोनों स्ट्रिंग्स के वर्तमान वर्ण स्थितियों को इंगित करेंगे

  • यदि स्ट्रिंग समाप्त हो गई है लेकिन पैटर्न में अधिक वर्ण शेष हैं, तो 0 लौटाएं क्योंकि पैटर्न नहीं मिला और हम स्ट्रिंग के अंत तक पहुंच गए।

  • यदि वर्तमान वर्ण पैटर्न में अंतिम वर्ण है तो यह स्ट्रिंग में मिल गया, 1 लौटाएं।

  • यदि दोनों वर्तमान वर्ण समान हैं, तो दोनों पॉइंटर्स को अगली स्थितियों पर ले जाएं।

  • यदि दोनों वर्तमान वर्ण मेल नहीं खाते, तो स्ट्रिंग के पॉइंटर को अगली स्थिति पर ले जाएं।

  • इनपुट स्ट्रिंग्स को कैरेक्टर सरणी Str और subStr के रूप में लें।

  • फ़ंक्शन match(char *str1, char *substr1) दो उपस्ट्रिंग लेता है और 1 लौटाता है यदि substr1 और str1 समान हैं।

  • दोनों पॉइंटर्स स्ट्रिंग्स में मौजूद वर्णों को इंगित करते हैं, प्रारंभ में शुरुआती स्थितियों पर।

  • यदि substr खाली है, तो 0 लौटाएं।

  • यदि दोनों स्ट्रिंग्स खाली हैं, तो 0 लौटाएं।

  • यदि दोनों वर्तमान वर्ण समान हैं तो match(str1 + 1, substr1 + 1) का उपयोग करके अगले वर्णों के लिए पुनरावर्ती रूप से जांचें

  • फ़ंक्शन checksubString(char *str2, char *substr2) दोनों स्ट्रिंग्स लेता है और 1 लौटाता है यदि substr2, str2 में मौजूद है।

  • यदि str2 और substr2 द्वारा इंगित वर्तमान वर्ण समान हैं तो जांचें कि क्या लगातार वर्ण भी match() फ़ंक्शन का उपयोग करके मेल खाते हैं। यदि यह 1 लौटाता है तो 1 लौटाएं।

  • यदि str2 के अंत तक पहुंच गए तो 0 लौटाएं।

  • अन्यथा checksubString(str2 + 1, substr2) का उपयोग करके str2 के अगले वर्ण के लिए पुनरावर्ती रूप से जांचें;

  • यदि सभी शर्तें विफल होती हैं तो checksubString(str2 + 1, substr2) का उपयोग करके पुनरावर्ती रूप से जांचें;

  • रिटर्न मान के अनुसार परिणाम प्रिंट करें।

उदाहरण

#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!

  1. - C++ में फंक्शन से सरणी कैसे लौटाएं?

    C++ पूरी सरणी नहीं लौटाता लेकिन यह सरणी का पॉइंटर लौटा सकता है। फंक्शन के बाहर, लोकल वेरिएबल का पता नहीं लौटाया जा सकता। लोकल वेरिएबल को स्टैटिक बनाकर, यह लोकल वेरिएबल का पता लौटा सकता है। पॉइंटर लौटाने का सिंटैक्स निम्नलिखित है। int * function_name() { body } यहां, function_name − उपयोगकर्ता

  1. - C++ में सबस्ट्रिंग

    सबस्ट्रिंग एक स्ट्रिंग का हिस्सा है। C++ में सबस्ट्रिंग प्राप्त करने के लिए एक फ़ंक्शन substr() है। इस फ़ंक्शन में दो पैरामीटर्स होते हैं: pos और len। pos पैरामीटर सबस्ट्रिंग की शुरुआती पोजीशन निर्दिष्ट करता है और len सबस्ट्रिंग में कैरेक्टर्स की संख्या दर्शाता है। उदाहरण #include <iostream>

  1. - C++ में swap() फ़ंक्शन

    swap() फ़ंक्शन दो संख्याओं को स्वैप (अदला-बदली) करने के लिए उपयोग किया जाता है। तीसरे वेरिएबल की आवश्यकता नहीं होती। <algorithm> या <utility> हेडर में परिभाषित (C++11 से)। सिंटैक्स void swap(Type& a, Type& b); उदाहरण 1: मान द्वारा पास (मान बदलते नहीं) #include <bits/stdc++.