表达式求值详细解析
作者:
Siriuss
,
2021-10-28 10:16:18
,
所有人可见
,
阅读 256
思路: 用一个数字栈和一个字符栈维护表达式中的数字和运算符
1). 如果是'(' 或者是 数字直接分别入对应的栈
2). 如果是')' 则把直到栈顶为'(' 此时算的是表达式中()中的值,优先级最高
3). 如果是运算符,则此时要比较前一个运算符,如果>=前一个运算符(栈顶运算符),则计算;
否则,压入栈中。所以,应该提前用哈希表维护一个优先级map,可以O(1)时间比较。
stack<int> nums;
stack<char> op;
void eval() {
auto b = nums.top(); nums.pop();
auto a = nums.top(); nums.pop();
auto c = op.top(); op.pop();
if (c == '+') nums.push(a + b);
else if (c == '-') nums.push(a - b);
else if (c == '*') nums.push(a * b);
else if (c == '/') nums.push(a / b);
else if (c == '%') nums.push(a % b);
else if (c == '^') {
int x = 1;
while (b--) x *= a;
nums.push(x);
}
}