算法:求表达式的值的通用解法框架
对于一个表达式.我们通常的讲包含两个部分,运算数(数字)和运算符
如: 3 + 5 * 7
其中运算符为 +,*
,数字为3,5,7
;
如: 0&1&(1|0), 其中运算符从左往右依次为:&&(|)
,运算数为0110
而,在求解表达式的值的过程中,算法往往采用两个栈来维护.一个用来存储运算数的num
栈,另一个用来存储运算符的op
栈.
第一步读入数据
表达式读入.通常以字符串存储.
再尔遍历字符串, 对字符串的各个字符进行操作
这里不考虑表达式的合法性.因为若是求表达式的值,考题的重点在于求值的逻辑,而不在于表达式的合法性,99%的情况下,表达式都是合理的
表达式是否合理, 主要判断是括号的匹配, 以及双目运算符的左右是否各自都是数值.
第二步得到数字和运算符
得到数字
在遍历的过程中, 如果遇到了数字,记得连续选取.这里面先介绍两个工具.
double stod(string s)
将字符串转成浮点数
cout