C++实现python的eval函数

本文介绍了如何使用C++来实现类似Python的eval函数,通过记录数组或操作符的结构体,将中缀表达式转换为后缀表达式,然后计算后缀表达式的实际值。详细过程包括表达式的切割、中缀转后缀及后缀表达式的求值。参考链接提供了一个完整的实现示例。
摘要由CSDN通过智能技术生成

用一个结构体记录数组或操作符

typedef struct Node{
   //运算结点,记录数字或运算符号
    bool isop;
    char op;
    int num;
    Node(){
   }
    Node(int d){
   
        num=d;
        isop=0;
    }
    Node(char op_){
   
        op=op_;
        isop=1;
    }
    void output(){
   
        if(isop) cout<<op;
        else cout<<num;
    }
}Node;

把表达式切割为结点

类似词法分析
只能对单个数字进行切割,待优化

vector<Node> exp2nodes(string exp){
   
    vector<Node> ans;
    FF(i,exp.size()){
   
        char c=exp[i];
        if(c>='0' && c<='9'){
   
            ans.push_back((int)(c-'0'));
        }else{
   
            ans.push_back(c);
        }
    }
    return ans;
}

中缀表达式生成后缀表达式

https://www.cnblogs.com/hantalk/p/8734511.html

int getPriority(char op){
   
    switch(op){
   
        case '+':
        case '-':
            return 1;
        case '*':
        case '/':
            return 2;
        default:
            return 0;
    }
}

vector<Node> yieldPostOrderExpress(vector<Node> &in){
   
    vector<Node> post;
    Node ops[LEN];
    int top=-1;//栈顶指针
    FF(i,in.size()){
   
        Node u=in[i];
        if(u.isop){
   
            if(u.op=='('){
   
                ops[++top]=u;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值