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+ 瀏覽

開啟您的 職業

完成課程獲得認證

開始
廣告
© . All rights reserved.