C++ 中前缀到中缀转换


在这个问题中,我们给定一个前缀表达式。我们的任务是打印给定表达式的中缀转换。

前缀表达式是操作符在操作数之前的表达式。

示例:+AB。

中缀表达式是操作符在操作数之间的表达式。

示例:A+B

中缀表达式是人类理解的信息,但是计算机对前缀或后缀表达式(通常为后缀)进行计算。

我们举个例子来理解这个问题

Input: prefix : /+LM/NX
Output: infix : (L+M) / (N/X)

为了解决这个问题,我们将使用堆栈数据结构。我们将按相反的顺序遍历前缀表达式。并为表达式的每个元素检查这些情况。

如果元素是操作数 -> 将 (element) 入栈。

如果元素是操作符 -> 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}}}

更新于: 2020 年 2 月 3 日

1K+ 浏览

开启您的 职业

完成课程获得认证

开始
广告