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}}}
廣告