C++ 中的字尾表示式轉中綴表示式


在這個問題中,我們得到字尾表示式的形式,我們的任務是打印表達式的中綴形式。

中綴表示式是一種運算子位於運算元中間的表示式,例如 運算元 運算子 運算元。

字尾表示式是一種運算子位於運算元之後的表示式,例如 運算元 運算元 運算子。

字尾表示式易於系統計算,但不易於人類閱讀。因此需要進行這種轉換。通常,終端使用者進行閱讀和編輯使用中綴表示法,因為它們是用括號分隔的,因此易於人類理解。

讓我們舉個例子來理解這個問題

輸入 − 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}}}

更新於:2020年4月17日

5K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告