每日一题-数据结构
#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;
}
用栈模拟对中缀表达式求值.
posted on 2022-12-06 11:42 Whosedream-0019 阅读(18) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】