計算器第二步-------計算(+ - * /) (第四次作業)


計算器第二步-------計算(+ - * /)

項目源文件地址:Calculator


項目信息:

  • 項目名稱:Calculator

  • 項目版本:1.1

  • 項目實現:

       *對四則運算表達式進行拆解
       *對拆解后的表達式進行簡單的錯誤判定
       *對正確的表達式進行計算並輸出結果
    

具體實現

  • 對表達式進行拆解

    * 對操作符與數字進行區分,尤其是負號和減號的處理要進行特判。再把拆分后的操作符傳入隊列儲存。
    
      特判處理代碼詳見: [scan.cpp](https://github.com/Mystarset/object-oriented/blob/master/Calculator/scan.cpp)
    
  • 對拆解后的表達式進行簡單的錯誤判定

    • 對長度大於10的數字報錯
    • 對括號不匹配的算術表達進行報錯(用棧進行判斷)
  • 對算術表達式進行計算

    • 對原算術表達式加入兩個#號,用於判斷表達式是否計算結束

    • 用一個OprRelation數組來判斷操作符與操作符之間的優先級大小關系

    • 用兩個棧一個儲存操作符,另一個儲存數字 (用 sstream 函數庫把字符轉成數字)

    • 對棧頂操作符和當前遇到的操作符進行優先級大小判斷

      • ‘<’ 把當前操作符入棧
      • ‘=’ 說明匹配括號,操作符棧頂元素出棧
      • ‘>' 取出操作符棧頂元素,以及數字棧的兩個元素,進行計算。

完成項目的過程

  • 這次的代碼修改整體並沒有遇到什么困難,大部分東西網絡上都可以輕松查到,自己加以理解就可以了。
  • 我糾結比較久的是負號和減號的處理,我在特判出了負數之后,發現“-()”這種形式的式子還是會存在問題,於是我就在數字棧一開始先入棧了一個0元素以防止出現這種情況時式子計算出錯。
  • 關於泡犇犇(鄭浩暉)在評論的8樓給出的bug,我查看之后發現是負號的處理出現了問題,"()-10"這樣的式子之前的代碼我會把-和10連在一起看成一個負數,經過修改后把他們分開了。
  • 本來只是想考慮比較正常的表達式的。。但是在泡犇犇的帶領下,我還是決定多打些代碼去處理一些特殊的表達式,於是我就新建了一個Pretreatment的類去專門對一個表達式的格式進行轉換,轉成我的計算方法能夠接受的表達式。從而使我的代碼能夠成功計算出評論中泡犇犇給出的式子。
  • 當然我的代碼應該還有BUG,歡迎大家來找出BUG。(尤其歡迎泡犇犇)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM