在此问题中,我们以后缀形式给出表达式,而我们的任务是打印表达式的中缀形式。
中缀表达式是一个表达式,其中运算符位于操作数的中间,就像操作数运算符操作数一样。
后缀表达式是一个表达式,其中运算符位于运算对象之后,例如运算对象运算符。
后缀表达式很容易被系统计算出来,但是却不可读。因此,此转换是必需的。通常,最终用户的阅读和编辑均以括号表示,因为括号之间用括号分隔,因此人类容易理解。
让我们以一个例子来了解问题
输入-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<<"The infix conversion of the postfix expression '"<<postfix<<"' is : "; cout<<infixConversion(postfix); return 0; }
输出结果
The infix conversion of the postfix expression 'xyae+/%' is : {x%{y/{a+e}}}