牛客网刷题
【题目】:输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。
【解题思路】:
1.用两个栈分别压数字和运算符;
2.如果当前运算符优先级(’*/’)高于栈顶运算符(‘±’)优先级,则将运算符入栈;反之,从数字栈中弹出两个数,从运算符栈中弹出栈顶运算符,进行运算,数字栈压入运算结果,符号栈压入当前运算符。重复该操作直到不满足条件。
3.出现左括号,则直接压入;出现右括号,则从数字栈中弹出两个数,从运算符栈中弹出栈顶运算符,进行运算,数字栈压入运算结果,重复该操作直到栈顶弹出右括号位置。
【代码及分析】:
#include <iostream>
#include <stack>
using namespace std;
string mp = "+-*/)]}";
// 当前运算符与符号栈的栈顶运算符做优先级比较,如果当前优先级高,则不做运算压入栈中,相同进行运算
bool cmp(char c1, char c2)
{
if (c1 =='(') {
return false;
} else if((c1=='+' || c1=='-') && (c2=='*' || c2=='/')){
return false;
}
return true;
}
void doCal