【栈】【字符串语法】牛牛与后缀表达式

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();  // 返回最后栈顶的结果
    }
};

posted @ 2024-10-07 00:09  peterzh6  阅读(4)  评论(0编辑  收藏  举报