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

C++ में वैध पैरेंथेसिस


मान लीजिए हमारे पास एक अभिव्यक्ति है। अभिव्यक्ति में कुछ पैरेंथेसिस हैं; हमें जांचना है कि पैरेंथेसिस संतुलित हैं या नहीं। पैरेंथेसिस का क्रम (), {} और [] है। मान लीजिए दो स्ट्रिंग हैं। "()[(){()}]" यह वैध है, लेकिन "{[}]" अवैध है।

कार्य सरल है; हम इसे करने के लिए स्टैक का उपयोग करेंगे। हमें समाधान प्राप्त करने के लिए इन चरणों का पालन करना चाहिए -

  • अभिव्यक्ति को तब तक ट्रैवर्स करें जब तक यह समाप्त न हो जाए

    • यदि वर्तमान वर्ण प्रारंभिक ब्रैकेट है जैसे (, { या [, तो स्टैक में पुश करें

    • यदि वर्तमान वर्ण समापन ब्रैकेट है जैसे ), } या ], तो स्टैक से पॉप करें, और जांचें कि क्या पॉप किया गया ब्रैकेट वर्तमान वर्ण का संबंधित प्रारंभिक ब्रैकेट है, तो यह ठीक है, अन्यथा, वह संतुलित नहीं है।

  • स्ट्रिंग समाप्त होने के बाद, यदि स्टैक में कुछ प्रारंभिक ब्रैकेट बचे हैं, तो स्ट्रिंग संतुलित नहीं है।

उदाहरण

#include <iostream> 
#include <stack> 
using namespace std; 

bool isBalancedExp(string exp) { 
    stack stk; 
    char x; 
    
    for (int i = 0; i < exp.length(); i++) { 
        if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{') { 
            stk.push(exp[i]); 
            continue; 
        } 
        
        if (stk.empty()) 
            return false; 
        
        switch (exp[i]) { 
            case ')': 
                x = stk.top(); 
                stk.pop(); 
                if (x == '{' || x == '[') 
                    return false; 
                break; 
            case '}': 
                x = stk.top(); 
                stk.pop(); 
                if (x == '(' || x == '[') 
                    return false; 
                break; 
            case ']': 
                x = stk.top(); 
                stk.pop(); 
                if (x == '(' || x == '{') 
                    return false; 
                break; 
        } 
    } 
    
    return (stk.empty()); 
} 

int main() { 
    string expresion = "()[(){()}]"; 
    if (isBalancedExp(expresion)) 
        cout << "This is Balanced Expression"; 
    else 
        cout << "This is Not Balanced Expression"; 
}

इनपुट

"()[(){()}]"

आउटपुट

This is Balanced Expression

  1. - n वैध ब्रैकेट अनुक्रम ढूंढने के लिए C++ प्रोग्राम

    मान लीजिए हमारे पास एक संख्या n है। जैसा कि हम जानते हैं, एक ब्रैकेट अनुक्रम एक स्ट्रिंग है जिसमें केवल वर्ण ( और ) होते हैं। एक वैध ब्रैकेट अनुक्रम एक ब्रैकेट अनुक्रम है जिसे मूल अनुक्रम के वर्णों के बीच 1 और + वर्ण डालकर एक सही अंकगणितीय अभिव्यक्ति में बदला जा सकता है। इसलिए, यदि ब्रैकेट अनुक्रम (

  1. - C++ में एक एक्सप्रेशन से अवैध पैरेंथेसिस को हटाना

    एक पैरेंथेसिस अनुक्रम दिया गया है; अब, आपको उन सभी संभावित पैरेंथेसिस को प्रिंट करना होगा जो यह अवैध ब्रैकेट को हटाकर बना सकता है, उदाहरण के लिए: इनपुट: str = ()())() आउटपुट: ()()() (())() दो संभावित समाधान हैं ()()() और (())() इनपुट: str = (v)())() आउटपुट: (v)()() (v())() इस समस्या में, हम बैकट्

  1. C++ में वैलिड सुडोकू C++ में वैलिड सुडोकू

    मान लीजिए हमें 9×9 मैट्रिक्स दिया गया है जिसे सुडोकू कहा जाता है। कार्य यह जांचना है कि दिया गया सुडोकू पैटर्न मान्य है या नहीं। सामान्य तौर पर, एक सुडोकू बोर्ड इस तरह दिखता है, सुडोकू के नियम - हर रो में 1-9 की रेंज में एक नंबर होता है हर कॉलम में 1-9 की रेंज में नंबर होते हैं। 3×3 का प्रत्येक ब्