#include <bits/stdc++.h>
using namespace std;
unordered_map<char, int> pr = {{'*', 2}, {'/', 2}, {'+', 1}, {'-', 1}};
stack<int> num;
stack<char> op;
void eval() {
auto b = num.top();
num.pop();
auto a = num.top();
num.pop();
auto ch = op.top();
op.pop();
if (ch == '*') {
num.push(a * b);
}
if (ch == '+') {
num.push(a + b);
}
if (ch == '-') {
num.push(a - b);
}
if (ch == '/') {
num.push(a / b);
}
}
int main() {
string s;
cin >> s;
for (int i = 0; s[i]; ++i) {
auto c = s[i];
if (isdigit(c)) {
int x = 0, j = i;
while (s[j] and isdigit(s[j])) {
x = x * 10 + s[j++] - '0';
}
i = j - 1;
num.push(x);
} else if (c == '(') {
op.push('(');
} else if (c == ')') {
while (op.top() != '(') {
eval();
}
op.pop();
} else {
while (op.size() and op.top() != '(' and pr[op.top()] >= pr[c]) {
eval();
}
op.push(c);
}
}
while (op.size()) {
eval();
}
cout << num.top() << '\n';
return 0;
}
用栈模拟对中缀表达式求值.
标签:ch,每日,pop,num,push,一题,数据结构,top,op From: https://www.cnblogs.com/whose-dream/p/16954802.html