所以我編寫了一個基於cmd的C++計算器。我完成了它,但我想知道,在將中綴轉換爲後綴後,我有一個隊列稱爲包含運算符/操作數的後綴隊列,順序正確。如何將後綴表達式轉換回中綴?C++將Postfix轉換爲中綴
1
A
回答
1
如果你不介意產生一些額外的括號,它應該很容易。你基本上像往常一樣「評估」後綴數據,除了當你到達一個操作符時,不是評估該操作符並將結果推送到堆棧上,而是打印出一個開放頁面,第一個操作數,操作符,第二個操作數,最後是一個近親。
如果您不介意更改順序,避免多餘的括號也很容易。將表情向後走,重新排列operator operand operand
到operand operator operand
。如果遇到需要操作數的操作符,則可以使用子表達式來打印輸出。當且僅當其運算符的優先級低於先前遇到的運算符時,才需要將該子表達式括在括號中。例如,考慮:a b + c *
。走這個倒退,我們得到*
,然後c
,所以我們開始打印出c *
。然後我們需要另一個操作數,但我們有一個+
,所以我們有一個子表達式。由於+
的優先級低於*
,因此我們需要將該子表達式括在括號內,所以我們得到c * (b + a)
。
反過來說,如果我們有:a b * c +
,我們會同樣開始,生產c +
,但後來因爲*
是更高優先級是+
,我們可以/可以打印出a * b
(或b * a
)沒有括號。
請注意,使用-
或/
(或其他任何不可交換的東西),您必須更仔細地確定操作數的順序。即便如此,你也不會獲得原始表達式,只是一個表達式應該在邏輯上等同於它。
相關問題
- 1. 中綴到Postfix轉換
- 2. 將中綴轉換爲Reverse Polish Notation(Postfix)的方法
- 3. 將中綴轉換爲Postfix時掃描多位數字
- 4. 將中綴轉換爲PostFix括號問題
- 5. 中綴到Postfix轉換錯誤
- 6. 將Postfix表達式轉換爲中綴並計算後綴並給出答案
- 7. 將中綴轉換爲profix
- 8. 如何將前綴轉換爲中綴
- 9. Postfix中綴
- 10. 將前綴轉換爲後
- 11. 將Infix轉換爲Postfix並評估Postfix表示法
- 12. 中綴到Postfix轉換括號中的錯誤
- 13. C++中綴到前綴轉換?
- 14. 從中綴表達式轉換後評估postfix表達式
- 15. 將中綴轉換爲Rpn(分流碼)
- 16. 從後綴轉換爲中綴
- 17. 將中綴轉換爲python中的前綴
- 18. 將中綴轉換爲後綴:無法識別堆棧錯誤
- 19. 如何將中綴表達式轉換爲後綴表達式?
- 20. 將中綴表示法轉換爲後綴表示法
- 21. 將二進制樹的中綴轉換爲後綴
- 22. 計算並將前綴轉換爲中綴
- 23. 將中綴轉換爲後綴,然後解決方程
- 24. 用於將中綴轉換爲後綴的僞代碼
- 25. 將中綴表達式轉換爲後綴表達式
- 26. 如何將infix轉換爲erlang中的postfix?
- 27. 中綴後綴轉換器
- 28. 使用Java將中綴表達式轉換爲前綴和後綴表達式
- 29. Java Postfix字符串轉換
- 30. 將c#RSACryptoServiceProvider轉換爲C++
由於這兩個表示之間沒有雙射映射,因此無法將其「返回」爲中綴。意思是說,幾個中綴表達式可能產生相同的後綴表達式,並且沒有辦法說哪一個是原始表達式。你所能做的就是轉換成「一些」中綴表達式。 – 2012-03-07 23:26:49