এই সমস্যায়, আমাদের একটি প্রিফিক্স এক্সপ্রেশন দেওয়া হয়। আমাদের কাজ হল প্রদত্ত অভিব্যক্তির ইনফিক্স রূপান্তর প্রিন্ট করা।
প্রিফিক্স এক্সপ্রেশন হল সেই সব এক্সপ্রেশন যার অপারেন্ডের আগে অপারেটর থাকে।
উদাহরণ:+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}}}