Postfix到C ++中的Infix

在此问题中,我们以后缀形式给出表达式,而我们的任务是打印表达式的中缀形式。

中缀表达式是一个表达式,其中运算符位于操作数的中间,就像操作数运算符操作数一样。

后缀表达式是一个表达式,其中运算符位于运算对象之后,例如运算对象运算符。

后缀表达式很容易被系统计算出来,但是却不可读。因此,此转换是必需的。通常,最终用户的阅读和编辑均以括号表示,因为括号之间用括号分隔,因此人类容易理解。

让我们以一个例子来了解问题

输入-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}}}