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

C++ में पोस्टफिक्स को इनफिक्स में बदलना


इस समस्या में, हमें एक अभिव्यक्ति पोस्टफिक्स रूप में दी गई है और हमारा कार्य इसका इनफिक्स रूप प्रिंट करना है।

इनफिक्स अभिव्यक्ति वह अभिव्यक्ति है जिसमें ऑपरेटर ऑपरेंड के बीच में होता है, जैसे ऑपरेंड ऑपरेटर ऑपरेंड।

पोस्टफिक्स अभिव्यक्ति वह अभिव्यक्ति है जिसमें ऑपरेटर ऑपरेंड के बाद होता है, जैसे ऑपरेंड ऑपरेटर।

पोस्टफिक्स अभिव्यक्तियों की गणना सिस्टम द्वारा आसानी से की जाती है लेकिन ये मानव-पठनीय नहीं होतीं। इसलिए इस रूपांतरण की आवश्यकता होती है। आमतौर पर अंतिम उपयोगकर्ता द्वारा पढ़ना और संपादन इनफिक्स नोटेशन में किया जाता है क्योंकि वे पैरेंथेसिस से अलग होते हैं इसलिए मनुष्यों के लिए आसानी से समझने योग्य होते हैं।

आइए एक उदाहरण से समझते हैं:

इनपुट - xyz/*

आउटपुट - (x * (y/z))

इस समस्या को हल करने के लिए, हम स्टैक डेटा संरचना का उपयोग करेंगे। और पोस्टफिक्स अभिव्यक्ति को एक-एक करके पार करेंगे और निम्नलिखित मामलों की जांच करेंगे:

केस 1 - यदि ऑपरेंड मिलता है, तो इसे स्टैक में पुश करें।

केस 2 - यदि ऑपरेटर मिलता है, तो दो ऑपरेंड पॉप करें, तीनों का एक इनफिक्स अभिव्यक्ति बनाएं और अभिव्यक्ति को ऑपरेंड के रूप में पुश करें।

अंत में जब स्टैक में केवल एक तत्व बचता है और पार करना पूरा हो जाता है, तो स्टैक के शीर्ष को पॉप करें, यह इनफिक्स रूपांतरण है।

उदाहरण

हमारे समाधान के कार्यान्वयन को दर्शाने वाला प्रोग्राम।

#include <bits/stdc++.h> using namespace std; bool isOperand(char x) {    return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'); } string infixConversion(string postfix) {    stack<string> infix;    for (int i=0; postfix[i]!='\0'; i++) {       if (isOperand(postfix[i])) {          string op(1, postfix[i]);          infix.push(op);       } else {          string op1 = infix.top();          infix.pop();          string op2 = infix.top();          infix.pop();          infix.push("{"+op2+postfix[i]+op1 +"}");       }    }    return infix.top(); } int main() {    string postfix = "xyae+/%";    cout<<"पोस्टफिक्स अभिव्यक्ति '"<<postfix<<"' का इनफिक्स रूपांतरण है: ";    cout<<infixConversion(postfix);    return 0; }

आउटपुट

पोस्टफिक्स अभिव्यक्ति 'xyae+/%' का इनफिक्स रूपांतरण है: {x%{y/{a+e}}}

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

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

  1. C++ में उदाहरण के साथ एक्सप्रेशन ट्री C++ में उदाहरण के साथ एक्सप्रेशन ट्री

    एक एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री है जिसमें ट्री का प्रत्येक नोड या तो एक ऑपरेटर या ऑपरेंड से बना होता है। लीफ नोड्स ट्री के एक ऑपरेंड को दर्शाते हैं। नॉन-लीफ नोड्स ट्री के एक ऑपरेटर को दर्शाते हैं। उदाहरण: इनफिक्स एक्सप्रेशन प्राप्त करने के लिए जिसे आसानी से हल किया जा सकता है, हम

  1. C++ में एक्सप्रेशन ट्री का मूल्यांकन C++ में एक्सप्रेशन ट्री का मूल्यांकन

    इस समस्या में, हमें एक एक्सप्रेशन ट्री दिया गया है जिसमें +, -, /, * जैसे बाइनरी ऑपरेशन होते हैं। हमें इस एक्सप्रेशन ट्री का मूल्यांकन करके परिणाम वापस करना होता है। एक्सप्रेशन ट्री क्या है? एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री है जिसमें प्रत्येक नोड या तो एक ऑपरेटर होता है या एक ऑपरेंड,