【棧】【字串語法】牛牛與字尾表示式

peterzh6發表於2024-10-07

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

相關文章