• 计算器第二步-------计算(+


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

    项目源文件地址: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。(尤其欢迎泡犇犇)
  • 相关阅读:
    jenkins任务
    追涨手段
    识别上升浪中的假反弹假阻力
    上升浪的判断
    点位超过10的上涨高位转折点
    纯碱下跌巨幅捕捉
    纯碱规律
    玉米
    iOS基础之界面通信
    iOS基础之UINavigationController(导航视图控制器)
  • 原文地址:https://www.cnblogs.com/starset/p/5350042.html
Copyright © 2020-2023  润新知