我正在嘗試使用兩個堆棧來評估中綴表達式,但是,我的程序不斷收到分段錯誤,我不確定是什麼導致了錯誤。我嘗試了RPN算法的僞代碼,但是我認爲當我調用doOperation時會出現我的問題。我不確定調用此參數時要包含哪些參數。我知道我需要一個(ValueType,char,ValueType),但是我不想寫doOperation(ch,ch,ch),因爲我非常確定這不會有幫助。任何人都可以幫我找出一種方法來調用這個函數嗎? (我很確定這是導致分段錯誤的原因之一)。Infix Expressions
0
A
回答
0
opStack
和valStack
in doOperation
應該使用processExpression
中的變量。
其函數原型應該是這樣的:
ValueType doOperation(ValueType operandL, char operation, ValueType operandR, stack<char>& opStack, stack<ValueType>& valueStack)
,請注意最後兩個參數:stack<char>& opStack, stack<ValueType>& valueStack
。它們必須是指針傳遞或引用傳遞的,而不是傳遞值。
processExpression
來電doOperation
這樣的:doOperation(operandL, ch, operandR, opStack, valueStack)
。
此外,當前的分段錯誤發生是因爲opStack
和valueStack
中定義的doOperation
沒有項目。 top()
將引用noexist值。
0
嘗試從doOperation
刪除這些行:
stack<char> opStack;
stack<ValueType> valStack;
operandR = valStack.top();
valStack.pop();
operandL = valStack.top();
valStack.pop();
operation = opStack.top();
opStack.pop();
請注意,您的double result
聲明是不存在的 - 你應該保持這一點。
那麼,發生了什麼事在上述各行:
創建堆棧
opStack
和valStack
。這兩個都是空的。您打電話給
.top()
,當堆棧爲空時,它會做壞事。.pop()
也在空堆棧上做壞事。您正試圖爲您傳入的參數賦值。即使這是成功的,您的參數也沒用。您只需以任何方式在您的函數中創建/初始化它們。
現在,在刪除上述行後,您需要將呼叫更改爲doOperation
。在processExpression
你會想要做這些電話呼叫doOperation
前:
operandL = valStack.top();
valStack.pop();
operandR = valStack.top();
valStack.pop();
operation = opStack.top();
opStack.pop();
doOperation(operandL, operation, operandR)
這是不是漂亮,尤其是當你爲你做的叫doOperation
,但三次它是一個開始。第一個目標是獲得工作代碼。如果你以後很喜歡,你可以做得更漂亮。
此外,這有點迂腐,但你應該重命名你的operation
變量爲operator
,因爲這就是它的確。「操作」是執行操作員時發生的事情。
相關問題
- 1. infix to postfix
- 2. 執行infix @列表
- 3. Code Emit and Expressions
- 4. Report Builder Expressions
- 5. Java replaceAll(..)和Regular Expressions
- 6. Grep multiple「and」expressions UNIX
- 7. Linq to ... and Lambda Expressions
- 8. Infix To Postfix概念性
- 9. Infix有postix的公式嗎?
- 10. Perl Regular Expressions sum numbers up
- 11. 從infix到postfix的好處是什麼?
- 12. infix,infixr,infixl之間的區別
- 13. 爲什麼'infix`是默認的
- 14. 在Crystal Report Expressions中添加連字符
- 15. 從Spring Security Expressions調用靜態方法?
- 16. 在Spring Expressions中創建一個地圖
- 17. Golang Regular Expressions - 我做錯了什麼?
- 18. 如何分析假設中的if-expressions?
- 19. Lisp s-expressions的平坦評價
- 20. 無法使用php項目(cron-expressions)
- 21. Sympy比較失敗,出現sympified expressions
- 22. 在C++ 11 Regular Expressions中是否有match_partial?
- 23. 正則表達式Expressions有關表情
- 24. 什麼是d:在Expressions Blend中優化?
- 25. 'pydoc -w EXPRESSIONS'不起作用,但'pydoc EXPRESSIONS'起作用。爲什麼? (全部大寫幫助主題)
- 26. 如何查找R中infix操作符的文檔?
- 27. 如何從SML模塊使用infix操作符?
- 28. 是否有一個C/C++庫來轉換MathML <-> Infix?
- 29. Java中的infix表達式的正則表達式問題
- 30. 我們可以在Kotlin中使用infix通用方法嗎?