C ++中的后缀转换前缀
在这个问题上,我们给了一个前缀表达式。我们的任务是打印给定表达式的后缀转换。
前缀表达式是在操作数之前具有运算符的表达式。
例如:+AB。
后缀 表达式是在表达式中的操作数之后带有运算符的表达式。
示例:AB/
前缀到后缀的转换不应涉及到后缀的转换。
让我们举个例子来了解这个问题,
Input: /+XY+NM Output: XY+NM+/ Explanation: infix -> (X+Y)/(N+M)
为了解决这个问题,我们将首先以相反的顺序遍历整个后缀表达式。我们将使用堆栈数据结构进行处理。并针对发现遍历的元素的情况执行以下操作
案例:如果符号是操作数->堆栈中的push(element)。
案例:如果符号是运算符->2*pop(element)fromstack。然后推送操作数的序列-操作数-运算符。
程序展示了我们算法的实现
示例
#include <iostream>
#include <stack>
using namespace std;
bool isOperator(char x) {
   switch (x) {
      case '+':
      case '-':
      case '/':
      case '*':
      return true;
   }
   return false;
}
string convertToPostfix(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 + op2 + prefix[i];
         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<<"Postfix expression : "<<convertToPostfix(prefix);
   return 0;
}输出结果
Prefix expression : *-AB/+CD*XY Postfix expression : AB-CD+XY*/*
