简介
本程序采用后缀表达式的方式对数字和运算符进行处理。tip:完整源码
目录
数据结构
1 | stack<double> num;//数字堆栈 |
主要函数
1 | double getInfo(string exp);//从字符串中获取数字及运算符信息 |
其中exp
用来存储表达式。
数字获取
源码
1 | int getNum(string exp) { |
解释
exp
存储从数字开始到结束的表达式,通过遍历寻到完整的数字,将其存储到num
的栈顶,并返回数字的字符长度。
运算符获取
源码
1 | int getOp(char exp, int opType) { |
解释
opType表示运算符的运算优先级
- 优先级顺序定义:
S
(开方)=4 >N
(负数标记)=3 >*
和/
=2 >+
和-
=1 >(
=0; - 运算方式:
1. 首先当op栈为空时,将获取的运算符放入堆栈,并将opType置为该运算符的优先级;如果不为空,比较当前运算符优先级`(opType1)`与栈顶运算符优先级`(opType2)`,若`opType1`>`opType2`,将运算符入栈,并将修改`opType`为当前运算符优先级;否则将运算符出栈,直到栈顶优先级小于当前运算符优先级。
2. 当有运算符出栈时针对不同的运算符进行相应的操作。
- 操作源码
1 | //获取相应运算符的运算结果 |
- 依据对应的栈顶操作符对
num
堆栈的栈顶或栈顶及栈顶次级进行相应的运算。- 如果进行了进行了出栈操作,则调用
getOpType
函数获取当前运算符堆栈中的最高优先级。- 操作源码
- 如果进行了进行了出栈操作,则调用
1 | //获取当前运算堆栈中的最高优先级 |
- 如果进行了进行了出栈操作,则调用
getOpType
函数获取当前运算符堆栈中的最高优先级。- 操作源码
1 | //获取当前运算堆栈中的最高优先级 |
函数调用
源码
1 | double getInfo(string exp) { |