每日一题-数据结构

#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   Whosedream-0019  阅读(18)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示