简单来看这个基础的四则运算器,是利用ui以及开发者协同开发
其操作步骤可拆分为以下几个步骤
①首先分析整个小项目,需要什么组件,拥有什么功能
所以先利用ui工具创建出一个可视化运算器界面,拥有简单四则运算器的基本功能按键以及数据公式显示窗口
②再利用“1~9”按键以及“+ - * / ”按键配合“LineEdit”input输入组件,--->实现可视化数据公式显示;
eg:
Widget.h文件添加 --- 右键转到槽(自动生成)
private slots:
void on_zerobutton_clicked();
private:
QString expression;
Widget.cpp文件添加
void Widget :: on_zerobutton_clicked()
{
expression +="+";
ui->lineEdit->setText(expression);
}
以上述代码实现点击“0“按键在lineEdit组件显示0;
根据上述例子,其他基础按键实现该效果的代码逻辑都是如此
如”<---“退位键,”C“清空键以及其他功能键,查询相应语句,写出程序逻辑。
整个简单四则运算器,最重要且最难的功能版块就是在于如何去实现这个说简单不简单,说难不难的逻辑
首先脑子里面先构思出运算逻辑
第一个问题:对于四则运算的简单运算优先级是总所周知的,所以我们得去判断如何实现这个优先级的
我们想要知道一个数字的大小就可以直接去比较,同理,字符符号也是如此,话不多说直接上代码:
eg:
在Widget.h文件中
去声明这个所需要用的函数
private slots:
int priority (char ch);
在Widget.cpp文件中添加
int Widget::priority (char ch)
{
switch(ch)
{
case ')':
return 3;
case '*':
case '/':
return 2;
case '+':
case '-':
return 1;
default :
return 0;
}
}
上述代码就是一个很简单符号优先级判断函数;
通过判断字符种类返回一个数字,用数字大小判断优先级
第二个问题:如何去存储数据?
存储数据,可以有多种方法,可以用结构体数组进行存储 ( 比较限制你的计算位数 ),也可以用栈进行存储 ( 利用了先进后出的规律实现 ),本文实现的方法就是采用栈的实现:
在QT Creator 中,QStack.h文件中包含了栈的使用方法
①创建两个栈,一个用于存储数字,一个用于存储运算符
②判断字符是否为'0'~'9'之间,是则,乘10加到tmp中,再将tmp入栈
③再判断其入栈的条件,比如说empty为空,运算符数组中的元素优先级大于栈顶运算符,‘(’且后面紧接的不是‘)’就会进行运算符的入栈。
④如果栈顶是‘(’且运算符数组为‘)’,将栈顶元素出栈pop
⑤如果运算符数组优先级小于或等于栈顶优先级,则进入运算,或者运算符为‘)’且,栈顶不为空,且如果运算符数组为空且栈为空也进入。里面使用到的算法也就比较简单
char ch = s_opt.top();
s_opt.pop();
switch(ch){
case '+':
num1 = s_num.top();
s_num.pop();
num2 = s_num.top();
s_num.pop();
s_num.push(num1+num2);
break;
}
其他三则运算符也是同样的逻辑;
运行效果:
总的来说整体四则运算符计算器,设计框架以及思路就是在于如何去实现ui设计界面和四则运算实现思路;
该设计只是打造一个非常基础的框架,若想实现更为丰富的四则运算器,可采用该思路。