C ++中的前缀转换前缀

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

前缀表达式是在操作数之前具有运算符的表达式。

例如:+ 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}}}

以上是 C ++中的前缀转换前缀 的全部内容, 来源链接: utcz.com/z/327322.html

回到顶部