在这个问题上,我们给了一个前缀表达式。我们的任务是打印给定表达式的中缀转换。
前缀表达式是在操作数之前具有运算符的表达式。
例如:+ AB。
前缀表达式是在操作数之间具有运算符的表达式。
示例:A + B
前缀表达是供人类理解的信息,但是计算机会对前缀或后缀表达式(通常为后缀)进行计算。
让我们以一个例子来了解问题
Input: prefix : /+LM/NX Output: infix : (L+M) / (N/X)
为了解决这个问题,我们将使用堆栈数据结构。我们将以相反的顺序遍历前缀表达式。并针对表达式的每个元素检查这些情况。
如果element是操作数->堆栈中的push(element)。
如果element是operator-> 2Xpop(topofstack)并按顺序推入字符串=操作数-operator-操作数。
最后,遍历之后,堆栈的顶部将包含一个字符串,该字符串是中缀转换,请打印它。
显示我们解决方案实施情况的程序
#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}}}