এই সমস্যায়, আমাদের একটি প্রিফিক্স এক্সপ্রেশন দেওয়া হয়। আমাদের কাজ হল প্রদত্ত অভিব্যক্তির ইনফিক্স রূপান্তর প্রিন্ট করা।
প্রিফিক্স এক্সপ্রেশন হল সেই সব এক্সপ্রেশন যার অপারেন্ডের আগে অপারেটর থাকে।
উদাহরণ:+AB.
ইনফিক্স এক্সপ্রেশন হল সেই সব এক্সপ্রেশন যার অপারেন্ডের মধ্যে অপারেটর থাকে।
উদাহরণ:A+B
ইনফিক্স এক্সপ্রেশন হল মানুষের বোঝার জন্য তথ্য, কিন্তু কম্পিউটার প্রিফিক্স বা পোস্টফিক্স এক্সপ্রেশনের (সাধারণত পোস্টফিক্স) গণনা করে।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক
Input: prefix : /+LM/NX Output: infix : (L+M) / (N/X)
এই সমস্যা সমাধানের জন্য, আমরা স্ট্যাক ডেটা স্ট্রাকচার ব্যবহার করব। আমরা এক্সপ্রেশনের বিপরীত ক্রমে প্রিফিক্স এক্সপ্রেশনটি অতিক্রম করব। এবং এক্সপ্রেশনের প্রতিটি উপাদানের জন্য এই ক্ষেত্রে পরীক্ষা করুন।
যদি উপাদানটি অপারেন্ড হয় -> স্ট্যাকের মধ্যে পুশ(উপাদান)।
যদি উপাদানটি অপারেটর হয় -> 2Xpop(topofstack) এবং একটি স্ট্রিং =অপারেন্ড - অপারেটর - অপারেন্ড হিসাবে পুশ করুন৷
অবশেষে, ট্রাভার্সালের পরে, স্ট্যাকের শীর্ষে একটি স্ট্রিং থাকবে যা ইনফিক্স রূপান্তর, এটি প্রিন্ট করুন।
আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম
উদাহরণ
#include <iostream> #include <stack> using namespace std; bool isOperator(char element) { switch (element) { case '+': case '-': case '/': case '*': return true; } return false; } string convertToInfix(string prefix) { stack<string> expression; int length = prefix.size(); for (int i = length - 1; i >= 0; i--) { if (isOperator(prefix[i])) { string op1 = expression.top(); expression.pop(); string op2 = expression.top(); expression.pop(); string temp = "{"+op1+prefix[i]+op2+"}"; expression.push(temp); } else { expression.push(string(1, prefix[i])); } } return expression.top(); } int main() { string prefix = "*-AB/+CD*XY"; cout<<"Prefix expression : "<<prefix<<endl; cout<<"Infix expression : " <<convertToInfix(prefix); return 0; }
আউটপুট
Prefix expression : *-AB/+CD*XY Infix expression : {{A-B}*{{C+D}/{X*Y}}}