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

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

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

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

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

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

जब पैटर्न कैरेक्टर '*' और '?' के अलावा अन्य हो, तो यदि पैटर्न और टेक्स्ट का वर्तमान कैरेक्टर मिल रहा है, तो केवल आगे बढ़ें।

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

इनपुट: मुख्य स्ट्रिंग और वाइल्डकार्ड पैटर्न
मुख्य स्ट्रिंग "Algorithm"
पैटर्न "A*it?m"

आउटपुट: पैटर्न मिल गया।

एल्गोरिदम

wildcardMatch(text, pattern)

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

शुरुआत
    n := टेक्स्ट की लंबाई
    m := पैटर्न की लंबाई
    यदि m = 0, तो
        वापस 0 यदि n = 0, अन्यथा वापस 1
    i := 0, j := 0
    जब तक i < n, करें
        यदि text[i] == pattern[i], तो
            i को 1 से बढ़ाएं
            j को 1 से बढ़ाएं
        अन्यथा यदि j < m और pattern[j] ? है, तो
            i को 1 से बढ़ाएं
            j को 1 से बढ़ाएं
        अन्यथा यदि j < m और pattern[j] * प्रतीक है, तो
            textPointer := i
            patPointer := j
            j को 1 से बढ़ाएं
        अन्यथा यदि patPointer पहले से अपडेट है, तो
            j := patPointer + 1
            i := textPointer + 1
            textPointer को 1 से बढ़ाएं
        अन्यथा
            वापस असत्य
    पूर्ण
    जब तक j < m और pattern[j] = * प्रतीक, करें
        j को 1 से बढ़ाएं
    पूर्ण
    यदि j = m, तो
        वापस सत्य
    वापस असत्य
अंत

उदाहरण (C++ कोड)

#include <iostream>
using namespace std;

bool wildcardMatch(string text, string pattern) {
    int n = text.size();
    int m = pattern.size();
    
    if (m == 0)
        return (n == 0);
    
    int i = 0, j = 0, textPointer = -1, pattPointer = -1;
    
    while (i < n) {
        if (text[i] == pattern[j]) {
            i++; j++;
        } else if (j < m && pattern[j] == '?') {
            i++; j++;
        } else if (j < m && pattern[j] == '*') {
            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++;
    
    if (j == m)
        return true;
    
    return false;
}

int main() {
    string text, 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 नामक एक मॉड्यूल है, जिसका उपयोग कार्य करने के लिए किया जाता है। यह मॉड्यूल फाइल नाम की तुलना एक पैटर्न से करता है, फिर मिलान के अनुसार True या False लौटाता है। इसका उपयोग करने के लिए स

  1. - रूबी पैटर्न मैचिंग मास्टर करें: एक व्यावहारिक गाइड

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