我試着做一個代碼來計算用戶輸入的公式的值。也就是說,如果用戶輸入「10 + 5」,程序將打印出「總和爲15」等等。起初,我認爲這是一件容易的事,但如果意識到只是使用scanf orsth不會做到這一點。然後我搞砸了數組和循環來查看循環是否在輸入中遇到「 - 」或「+」符號,然後將該字符保存在「 - 」或「+」之前,然後計算它,但是我無法做到這一點工作。 你能否請我帶着正確的方向來完成這項工作。 非常感謝!計算輸入。
計算輸入。
回答
這可能非常複雜,特別是當您達到運算符優先級並且您需要正確計算時,例如2 + 5 * 6
,需要將其視爲2 + (5 * 6)
。解決這個問題的正確方法是構建表達式樹(就像編譯器一樣)。例如
+
/\
2 *
/\
5 6
通過創建二叉樹做到這一點。每個節點都有一個操作和(最多)兩個子節點。然後通過遍歷表達式樹來評估表達式。
你要做的是解析算術表達式,然後評估它們。互聯網上有很多東西,所以,因爲這是你的功課,我會把你留給谷歌。你的第一個想法,這很容易做,可能是一個天真的想法,但如果你沒有太過雄心勃勃,這不是一個非常困難的問題。
謝謝你的回覆。我搜索了它,但在搜索10分鐘後沒有找到任何答案。這可能是因爲我真的不知道程序員的終端和使用的技術語言,所以我的搜索非常簡單,並且不是很具體。 順便說一句,這不是我的家庭作業,我只是這樣標記它,因爲在這個論壇的人以前告訴我,我應該把這些問題作爲家庭作業:d。 謝謝。我嘗試在網絡中搜索解析算術表達式,並查看我能找到的內容。 – geekkid 2012-02-27 17:18:44
看看這裏http://stackoverflow.com/questions/4589951/parsing-an-arithmetic-expression-and-building-a-tree-from-it-in-java – scibuff 2012-02-27 17:26:42
這可能有點頭大,但你可以做的是使用c和詞法分析器的語法引擎。
我相信,它被稱爲「野牛」和「函數yylex」
從我記得在學校裏,它是我們如何讓我們的Pascal編譯器。
http://en.wikipedia.org/wiki/GNU_bison
創建一棵樹後。您可以分析子樹,然後根節點將成爲子樹的總和。
這些可能是你可能要考慮
- 使用函數getline()或與fgets()獲得輸入
- 從頭開始
- 在字符串做兩遍,使用一些步驟一個隊列爲操作員,另一個爲操作數(數字)
- 第一遍過程中,您到達*或/,讀取下一個數字,對下一個數字和您讀取的數字執行操作,並將結果插入隊列
- 也第一遍期間,如果你讀+或 - ,默默地推動運營商和操作數到它們各自的隊列
- 第二階段手柄+期間-...使用隊列會幫助你妥善處理連續弊例如4-3-3
這些都不是確切的步驟,但它是一個啓發式值得探討 - 試圖通過這些工作,根據什麼對你有意義等
- 1. JQuery輸入計算
- 2. 如何計算輸入值
- 3. 計算表單輸入onChange
- 4. 輸入計算器程序
- 5. 在輸入中計算
- 6. 計算相關輸入值
- 7. 計算用戶的輸入
- 8. SSRS:使用輸入計算
- 9. 動態計算輸入值
- 10. jQuery的計算總輸入
- 11. NSScanner到NSArray輸入計算
- 12. Javascript動態輸入計算
- 13. 與Java輸入/輸出計算 - 小數
- 14. 根據基於其他輸入值計算的輸入值計算總和
- 15. 字數組輸入和輸出並計算輸入量
- 16. 'SImple'2類Java計算器不接受輸入或做計算
- 17. 根據輸入的內容計算出價格的Javascript計算
- 18. 像計算器一樣計算內部輸入
- 19. JQuery的計算器:計算輸入,清除後
- 20. 的Javascript計算問題時,有計算的輸入值
- 21. 找到算法來計算特定輸入的具體輸出
- 22. 從輸入中計算字符時,在輸出中計算空格字符
- 23. 自動計算輸入字段值
- 24. 使用.val()計算輸入jQuery
- 25. 初始輸入後計算器凍結
- 26. Java計算器崩潰輸入括號
- 27. 用Python計算用戶輸入時間
- 28. 的Javascript文本輸入計算器
- 29. 爲for循環計算輸入文件
- 30. 計算器解析用戶輸入
表達式求值通常要進行改變它們通過將中綴符號(例如,a + b)轉換爲後綴符號(例如,ab +),然後對其進行評估。這對初學者來說有點微不足道,但一旦你明白了,這很容易。 – vaisakh 2012-02-27 17:14:15