计算表达式 题解:用栈中缀表达式求值,附卡40%原因解答
原理直接看王道:https://www.bilibili.com/video/BV1b7411N798?spm_id_from=333.788.player.switch&vd_source=05a71f1abeba6e381e24f7eda5638267&p=29
先用map规定运算符的优先级,我的c++版本低不能直接赋值,建议也学一下map赋值笨办法,万一你上机的学校也是老版本就无从下手了。然后从头到尾遍历输入的字符串,遇到数字就加入数字栈num,遇到运算符先弹出优先级大于等于当前的运算符并计算,有了思路代码就是简单的模拟了。
但是直接写有一个问题,也是卡40%的原因,如果是多位数,比如1234/2就会出现问题,因为直接模拟只能读取一位,所以要加一层对于多位数的判断。
代码:#include<bits/stdc++.h>
using namespace std;
stack<int> num;
stack<char> op;
map<char,int> pri;
int cal(string str){
int ls = str.length();
int a,b;
char c;
for(int i = 0;i < ls;i++){
if(str[i] >= '0' && str[i] <= '9'){//num
int val = 0;
while(i < ls && str[i] >= '0' && str[i] <= '9'){//多位数
...
登录后发布评论
暂无评论,来抢沙发