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(); // 返回最後棧頂的結果
}
};