এটি আরেকটি স্ট্রিং ম্যাচিং পদ্ধতি। এই পদ্ধতিতে, আমরা ভেক্টর ব্যবহার করে একটি সাবস্ট্রিং অনুসন্ধান করছি।
C++ এ আমরা স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে সহজেই ভেক্টর তৈরি করতে পারি। আমরা মেইন স্ট্রিং এবং স্ট্রিং নিচ্ছি যেটিকে ভেক্টর হিসেবে সার্চ করা হবে, তারপর মেইন স্ট্রিংয়ে সার্চ করছি। যখন একটি মিল পাওয়া যায় তখন ফাংশন ঠিকানাটি ফেরত দেয় এবং এটি প্রধান স্ট্রিং থেকে সরিয়ে দেয়। তাই পরবর্তী পুনরাবৃত্তিতে, এটি অবস্থান 0 থেকে শুরু হয় এবং আবার অনুসন্ধান করে।
একাধিক ঘটনার জন্য, আমরা লুপ ব্যবহার করছি এবং বারবার ম্যাচের জন্য অনুসন্ধান করছি এবং অবস্থানটি ফিরিয়ে দিচ্ছি।
Input: Main String: “ABAAABCDBBABCDDEBCABC”, Pattern “ABC” Output: Pattern found at position: 4 Pattern found at position: 10 Pattern found at position: 18
অ্যালগরিদম
ভেক্টর_প্যাটার্ন_অনুসন্ধান(প্রধান, সাবস্ট্র)
ইনপুট − মূল পাঠ্য এবং সাবস্ট্রিং৷
৷আউটপুট − অবস্থান যেখানে প্যাটার্ন পাওয়া যায়
Begin p := starting point of the main string while r is not at the end of substr and p is not at the end of main, do r := starting of substr while item at position p & r are not same, and p in main, do p := p + 1 i := i + 1 done q := p while item at pos p & r are same, and r in substr and p in main, do p := p + 1 i := i + 1 r := r + 1 done if r exceeds the substr, then delete first occurrence of substr from main return the position where substr is found if p exceeds main string, then return 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<string.size(); i++){ cout << string[i]; } } int match_string(vector<char>& main, vector<char> substr){ vector<char>::iterator p,q, r; int i = 0; p = main.begin(); while (r <= substr.end() && p <= main.end()){ r = substr.begin(); while (*p != *r && p < main.end()){ p++; i++; } q = p; while (*p == *r && r <= substr.end() && p<=main.end()){ p++; i++; r++; } if (r >= 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