逆波兰表达式改写(C++)

复制代码
#include<iostream>
#include<cstring>

using namespace std;

class EV{
    public:
        EV(const int &vR, const int& vN)
        {
            result = vR;
            n =vN;
        }
        EV(){}
        int getResult() const
        {
            return result;
        }
        int getN() const
        {
            return n;
        }
        void setResult(const int& r)
        {
            result = r;
        }
        void setN(const int& N)
        {
            n = N;
        }
    private:
        int result, n ;

};

EV evaluate(const char* x)
{
    EV ev(0,0);
    EV v1, v2;
    if(*x == 0) return ev;
    if(x[0] >= '0' && x[0] <= '9')
    {
        ev.setResult(x[0] - '0') ;
        ev.setN(1);
        return ev;
    }
    v1 = evaluate(x + 1);
    v2 = evaluate(x + 1 + v1.getN());
    if(x[0] == '+') ev.setResult(v1.getResult() + v2.getResult());
    if(x[0] == '*') ev.setResult(v1.getResult() * v2.getResult());
    if(x[0] == '-') ev.setResult(v1.getResult() - v2.getResult());
    ev.setN(  1 + v1.getN() + v2.getN());
    return ev;
}

int main(int argc, char* argv[])
{
    string s = "-+3*5+261";
    const EV &ev = evaluate((char*)(s.c_str()));
    int res = ev.getResult();
    cout << res << endl;
    return 0;
}
复制代码

 

posted @   fourmii  阅读(269)  评论(3编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示