কম্পিউটার

C++ এ সাবস্ট্রিং সার্চ করতে রিকার্সিভ ফাংশন


ইনপুট হিসাবে দুটি স্ট্রিং Str এবং subStr দেওয়া হয়েছে। লক্ষ্য হল সাবস্ট্রিং-এ উপস্থিত টেক্সট Str-এ সাবস্ট্রিং হিসাবে বিদ্যমান কিনা তা খুঁজে বের করা। স্ট্রিং X কে Y এর একটি সাবস্ট্রিং বলা হয় যদি Y তে অন্তত একবার পুরো X উপস্থিত থাকে৷ আমরা এটি করার জন্য একটি পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করব৷

উদাহরণস্বরূপ

ইনপুট − Str =“tutorialspoint” subStr=”Point”

আউটপুট − প্রদত্ত স্ট্রিংটিতে সাবস্ট্রিং নেই!

ব্যাখ্যা − স্ট্রিং পয়েন্ট টিউটোরিয়াল পয়েন্টের সাবস্ট্রিং নয়

ইনপুট − Str =“globalization” subStr=”global”

আউটপুট − প্রদত্ত স্ট্রিংটিতে সাবস্ট্রিং রয়েছে!

ব্যাখ্যা − স্ট্রিং গ্লোবাল হল গ্লোবালাইজেশনের সাবস্ট্রিং

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

এই পদ্ধতিতে আমরা চেক করি যে subStr একটি পুনরাবৃত্ত পদ্ধতিতে Str-এর সাবস্ট্রিং কিনা। পুনরাবৃত্তির জন্য ধাপগুলো হবে:-

  • 1. উভয় স্ট্রিংকে একটি পুনরাবৃত্ত ফাংশনে পাস করুন যেখানে পয়েন্টার উভয় স্ট্রিংয়ের বর্তমান অক্ষর অবস্থান নির্দেশ করবে

  • যদি স্ট্রিং শেষ হয়ে যায় কিন্তু প্যাটার্নে আরও অক্ষর বাকি থাকে, তাহলে প্যাটার্ন খুঁজে না পাওয়ায় 0 ফেরত দিন এবং আমরা স্ট্রিংয়ের শেষে পৌঁছেছি।

  • যদি বর্তমান অক্ষরটি প্যাটার্নের শেষ অক্ষর হয় তবে এটি স্ট্রিং এ পাওয়া যায়, 1 রিটার্ন করুন।

  • যদি উভয় বর্তমান অক্ষর একই হয়, তাহলে উভয় পয়েন্টারকে পরবর্তী অবস্থানে নিয়ে যান।

  • যদি উভয় বর্তমান অক্ষর মেলে না, তাহলে স্ট্রিংয়ের জন্য পয়েন্টারটিকে পরবর্তী অবস্থানে নিয়ে যান।

  • অক্ষর অ্যারে Str এবং subStr হিসাবে ইনপুট স্ট্রিং নিন।

  • ফাংশন ম্যাচ (char *str1, char *substr1) দুটি সাবস্ট্রিং নেয় এবং যদি substr1 এবং str1 একই হয় তাহলে 1 প্রদান করে।

  • উভয় পয়েন্টার স্ট্রিংগুলিতে উপস্থিত অক্ষরগুলিকে নির্দেশ করে, প্রাথমিকভাবে শুরুর অবস্থানে৷

  • যদি সাবস্ট্রটি খালি থাকে, তাহলে 0 ফেরত দিন।

  • যদি উভয় স্ট্রিং খালি থাকে, তাহলে 0 ফেরত দিন।

  • যদি উভয় বর্তমান অক্ষর সমান হয় তবে ম্যাচ (str1 + 1, substr1 + 1) ব্যবহার করে পুনরাবৃত্তিমূলকভাবে পরবর্তী অক্ষরগুলির জন্য পরীক্ষা করুন

  • ফাংশন checksubString(char *str2, char *substr2) উভয় স্ট্রিং নেয় এবং str2 এ substr2 উপস্থিত থাকলে 1 প্রদান করে।

  • যদি str2 এবং substr2 দ্বারা নির্দেশিত বর্তমান অক্ষরগুলি একই হয় তবে ম্যাচ () ফাংশন ব্যবহার করে পরপর অক্ষরগুলি মেলে কিনা তা পরীক্ষা করুন। যদি এটি 1 ফেরত দেয় তবে 1 ফেরত দেয়।

  • যদি str2 এর শেষে পৌঁছে তাহলে 0 ফেরত দিন।

  • অন্যথায় checksubString(str2 + 1, substr2);

  • যদি সমস্ত শর্তের শর্ত ব্যর্থ হয় তবে চেকসাবস্ট্রিং(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++ ফাংশন থেকে স্থানীয় অ্যারে ফিরিয়ে আনতে হয়?

  2. কিভাবে C++ এ একটি ফাংশন থেকে একটি অ্যারে ফেরত যায়?

  3. C++ এ সাবস্ট্রিং

  4. C++ এ swap() ফাংশন