文章

7

粉丝

211

获赞

10

访问

37.4k

头像
第一遍用数组做的,参考题解又用vector做了一遍,方便删除和覆盖后缀表达式
推荐阅读
P1063
发布于2022年3月27日 15:42
阅读数 5.3k

#include<iostream>
#include<string>
#include<algorithm>
#include<stack>
#include<vector>
using namespace std;
const string temp = "+-*/^";

int getPri(char c) { // 获取优先级0 1 2 3
	return temp.find(c) / 2;
}

bool cmpPri(char a, char b) { // 比较优先级
	return getPri(a) >= getPri(b);
}

void print_(vector<string> vt) { // 打印
	int len = vt.size();
	for (int i = 0; i < len - 1; i++)
		cout << vt[i] << " ";
	cout << vt[len - 1] << endl;
}

void solve(vector<string> vt) { // 计算后缀表达式
	print_(vt);
	int len = vt.size();
	int num1, num2, result;
	stack<string> st;
	char op;
	int i = 0, pos;
	while (i < len) {
		if (temp.find(vt[i]) != -1) { // 是操作符
			num1 = atoi(vt[i - 2].data());
			num2 = atoi(vt[i - 1].data()); // 两个操作数
			op = vt[i].data()[0];
			switch (op) {
			case '+': result = num1 + num2; break;
			case '-':result = num1 - num2; break;
			case '*':result = num1 * num2;...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发