【栈】【字符串语法】牛牛与后缀表达式
https://ac.nowcoder.com/acm/contest/22669/B
两个char相加的结果是对应的ascii值相加
string和char相加的结果是字符串拼接的结果
试比较:
string s = "";
char a = 'a';
char b = 'b';
char c = a + b;
s += a;
s += b;
cout << c << endl;
cout << s << endl;
输出
�
ab
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
typedef long long ll;
// 计算函数,处理 * 、- 和 + 的情况
ll compute(ll first, ll second, const string& s) {
if (s == "*") {
return first * second;
}
if (s == "-") {
return first - second;
}
if (s == "+") {
return first + second;
}
return 0; // 默认返回0,防止编译器报错
}
/**
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
long long legalExp(string str) {
string op = "";
stack<ll> stack_;
for (int i = 0; i < str.size(); i++) {
char c = str[i];
// 如果是数字,拼接成多位数
if (isdigit(c)) {
op += c;
}
// 如果是分隔符(这里假设是 '#'),表示数字结束,压入栈中
else if (c == '#') {
if (!op.empty()) {
stack_.push(stoll(op)); // 将拼接好的数字字符串转为整数压栈
op = ""; // 清空用于下一个数字
}
}
// 如果是操作符
else {
ll second = stack_.top(); stack_.pop();
ll first = stack_.top(); stack_.pop();
string s(1, c); // 将字符操作符转换为字符串
ll res = compute(first, second, s);
stack_.push(res);
}
}
return stack_.top(); // 返回最后栈顶的结果
}
};