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

वाइल्डकार्ड पैटर्न मिलान


इस समस्या के लिए, एक मुख्य स्ट्रिंग और दूसरा वाइल्डकार्ड पैटर्न दिया गया है। इस एल्गोरिथम में, यह जांच करेगा कि वाइल्डकार्ड पैटर्न मुख्य टेक्स्ट से मेल खा रहा है या नहीं।

वाइल्डकार्ड पैटर्न में अक्षर या '*' या '?' चिह्न हो सकते हैं। '?' का उपयोग किसी एकल वर्ण से मेल खाने के लिए किया जाता है और '*' का उपयोग रिक्त स्थान सहित वर्णों के अनुक्रम से मेल खाने के लिए किया जाता है।

जब चरित्र '*' हो:हम स्टार चरित्र को अनदेखा कर सकते हैं और पैटर्न में अगले वर्णों की जांच करने के लिए आगे बढ़ सकते हैं।

जब अगला वर्ण '?' हो, तो हम टेक्स्ट में केवल वर्तमान वर्ण को अनदेखा कर सकते हैं, और पैटर्न और टेक्स्ट में अगले वर्ण की जांच कर सकते हैं।

जब पैटर्न कैरेक्टर '*' और '?' से इतर हो, तो अगर पैटर्न और टेक्स्ट का मौजूदा कैरेक्टर मेल खा रहा है, तो ही आगे बढ़ें।

इनपुट और आउटपुट

Input:
The main string and the wildcard pattern.
Main String “Algorithm”
Pattern “A*it?m”
Output:
The pattern matched.

एल्गोरिदम

wildcardMatch(text, pattern)

इनपुट: मुख्य पाठ और पैटर्न।

आउटपुट: यह सच है जब वाइल्डकार्ड पैटर्न मुख्य टेक्स्ट के लिए मेल खाते हैं।

Begin
   n := length of the text
   m := length of pattern

   if m = 0, then
      return 0 if n = 0, otherwise return 1
   i := 0, j := 0

   while i < n, do
      if text[i] == pattern[i], then
         increase i by 1
         increase j by 1
      else if j < m and pattern[j] is ? mark, then
         increase i by 1
         increase j by 1
      else if j < m and pattern[j] is * symbol, then
         textPointer := i
         patPointer := j
         increase j by 1
      else if patPointer is already updated, then
         j := patPointer + 1
         i := textPinter + 1
         increase textPointer by 1
      else
         return false
   done

   while j < m and pattern[j] = * symbol, do
      increase j by 1
   done

   if j = m, then
      return true
   return false
End

उदाहरण

#include<iostream>
using namespace std;

bool wildcardMatch(string text, string pattern) {
   int n = text.size();
   int m = pattern.size();

   if (m == 0)    //when pattern is empty
      return (n == 0);

   int i = 0, j = 0, textPointer = -1, pattPointer = -1;
   while (i < n) {
      if (text[i] == pattern[j]) {    //matching text and pattern characters
         i++;
         j++;
      }else if (j < m && pattern[j] == '?') {    //as ? used for one character
         i++;
         j++;
      }else if (j < m && pattern[j] == '*') {    //as * used for one or more character
         textPointer = i;
         pattPointer = j;
         j++;
      }else if (pattPointer != -1) {
         j = pattPointer + 1;
         i = textPointer + 1;
         textPointer++;
      }else
         return false;
   }

   while (j < m && pattern[j] == '*') {
      j++;     //j will increase when wildcard is *
   }

   if (j == m) {    //check whether pattern is finished or not
      return true;
   }

   return false;
}

int main() {
   string text;
   string pattern;
   cout << "Enter Text: "; cin >> text;
   cout << "Enter wildcard pattern: "; cin >> pattern;
   
   if (wildcardMatch(text, pattern))
      cout << "Pattern Matched." << endl;
   else
      cout << "Pattern is not matched" << endl;
}

आउटपुट

Enter Text: Algorithm
Enter wildcard pattern: A*it?m
Pattern Matched.

  1. अधिकतम द्विदलीय मिलान

    द्विपक्षीय मिलान एक ग्राफ में किनारों का एक सेट है जिसे इस तरह से चुना जाता है, कि उस सेट में कोई भी दो किनारे एक समापन बिंदु साझा नहीं करेंगे। अधिकतम मिलान किनारों की अधिकतम संख्या से मेल खा रहा है। जब अधिकतम मिलान मिल जाता है, तो हम दूसरा किनारा नहीं जोड़ सकते। यदि अधिकतम मिलान वाले ग्राफ़ में

  1. यूनिक्स फ़ाइल नाम पैटर्न पायथन में मेल खाता है

    यहां हम देखेंगे कि हम पायथन का उपयोग करके यूनिक्स शैल शैली पैटर्न मिलान तकनीक कैसे प्राप्त कर सकते हैं। fnmatch . नामक एक मॉड्यूल है , जो काम करने के लिए प्रयोग किया जाता है। इस मॉड्यूल का उपयोग फ़ाइल नाम की किसी पैटर्न से तुलना करने के लिए किया जाता है, फिर मिलान के अनुसार सही या गलत लौटाता है। इस

  1. रूबी में पैटर्न मिलान का परिचय

    आइए रूबी में पैटर्न मिलान के बारे में एक संक्षिप्त चर्चा के साथ शुरू करें, यह क्या करता है, और यह कैसे कोड पठनीयता को बेहतर बनाने में मदद कर सकता है। यदि आप कुछ साल पहले मेरे जैसे कुछ हैं, तो आप इसे रेगेक्स में पैटर्न मिलान के साथ भ्रमित कर सकते हैं। यहां तक ​​कि बिना किसी अन्य संदर्भ के पैटर्न मिल