(二)练手项目一日志 12.1

(二)练手项目一日志12.1

Github:https://github.com/kevin-lh/SoftwarePractice/tree/main/myCalculator


前言

本文主要阐述算术表达式运算——双栈运算符优先级法, 以及项目中的模块设计

一、详细设计

项目文件结构如下:

图中model
在这里插入图片描述
其中model.hmodel.cpp 为之前实现简单四则运算的文件,因为现在加入了算术表达式求值,封装成了另一个函数,所以已舍弃~~~

1.1 UI界面完善

因为加入了算术表达式功能,因此对UI界面进行了更改:
加入了 “(”,“)”,“DEL”,“r” 四个button,分别对应功能如下
“(”——左括号;
“ )”——右括号;
“DEL”——删除;
“r”——显示上一个运算;
在这里插入图片描述

1.2 双栈运算符优先级法

运算的过程如下:

     1)初始化两个栈,分别用于存放运算符和数字。接收这一整串的字符串,并从第一个字符开始,遍历字符串。
     2)遇到左括号,忽略。
     3)遇到数字,存入数字栈;遇到运算符,存入运算符栈。
     4)遇到右括号,开始计算,取出数字栈最顶上两个元素,以及运算符栈最顶上一个元素,用数字栈倒数第二个元素通过运算符和第一个元素进行运算。
     5)将计算的结果再压入数字栈。
     6)重复2-5,直到遇到最后一个括号,则计算结束,返回最终数字栈中的唯一元素。

举例说明:
在这里插入图片描述

1.3 实现函数

dialog.h中,声明以下公有函数:

    //2020.12.1新增
    void init();//初始化堆栈
    int getLevel(const QChar& oper);//得到运算符等级
    void toPostfix();//转成后缀表达式
    void evaluation();//求解
    void digitBtn(char ch);//显示

定义堆栈及以下私有变量:

    //2020.12.1新增
    QStack<QChar> expStack;//后缀表达式栈
    QStack<QChar>opStack;//运算符栈
    QString postfix;//存储后缀表达式
    bool complete;//运算是否完成
    int lefts;

函数实现在dialog.cpp

二、日志

今天主要实现了上述算术表达式的计算功能
测试用例
(1)3*(8-2)
在这里插入图片描述
(2)1+(2-1/2)*2
在这里插入图片描述

总结

今天实现了上述算术表达式的计算功能,但 DEL(逐个删除)功能还未实现,r(显示上一个运算)的功能也未实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值