带括号的四则运算表达式的求值栈实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
带括号的四则运算表达式的求值(栈实现)
利用栈这种数据结构来实现一个加减乘除以及带括弧的混合数学表达式的计算,对于数学表达式的计算,可以设置一个运算符栈和一个数字栈,分别来保存运算符、数字或者中间计算得到的结果。将整个表达式看做一个字符串,从开头依次判断每个字符是运算符还是数字,若是运算符,则根据运算符优先级来确定是将其压栈还是弹栈进行计算;若是数字,则先将其转化并计入一个临时double型变量中,看下一个字符是否为运算符栈,若是,则将临时变量压进数字栈,否则读取下一个数字字符并进行相关处理后累加到临时变量中,直到下一个字符为运算符,将临时变量压进数字栈。最后,当字符为"="时,结束计算,得到计算结果。本算法需要先设置一个运算符优先级表,下表可供参考:
+-*/()=
+>><<<>>
->><<<>>
*>>>><>>
/>>>><>>
(<<<<<=
)>>>>?>>
=<<<<=
参考代码如下:
注:本代码输入表达式时末尾不需要“=”,程序中会自动添加
#include
#include
#include
#include
#include
using namespace std;
char Precede(char a, char b) { {
point = 10;
else
num = s[i] - 48;
j = i + 1;
while(!IsOper(s[j])) { {
point = 10;
j++;
continue;
}
if(!point)? 5 - 7 /
2 + 3. - .1
1 +
2 / ( 2 - / ) - 3
2 * ( (
3 + 2 ) - 3
*/
本代码生成的程序,在输入表达式时,数字与运算符之间可以有若干空格或者没有;对于小数,可以没有整数部分(即小数点之前没有数字),也可以没有小数部分(即小数点之后没有数字);表达式可以为无效表达式(如括号不匹配或者出现除数为0的情况等);如以上的样例输入。对于以上样例输入,其对应输出结果为:
The divisor cannot be zero!
The parentheses do not match!
相关文档:
•
•
•
•
•
•
•
•
•
•
更多相关文档请访问: