栈中缀转后缀,计算表达式结果

栈中缀转后缀,计算表达式结果,第1张

中缀后缀,计算表达式结果

#include

// 中缀转后缀

using namespace std;

void duqu(vector&a,vector&b,char x){

    if(x-'0'>=0&&x-'0'<=9){ b.push_back(x); return;}

    else{

        if(a.empty()){ a.push_back(x); return;}

        else if(x=='('||a.back()=='('){ a.push_back(x); return;}

        else if(x=='*'||x=='/'&&(a.back()=='+'||a.back()=='-')){a.push_back(x); return; }

        else if((x=='*'||x=='/')&&(a.back()=='*'||a.back()=='/')){ //同级

            while(!(a.back()!='*'&&a.back()!='/')){

                b.push_back(a.back());a.pop_back();

            }

            a.push_back(x); return;

        }

        else if((x=='+'||x=='-')&&(a.back()=='+'||a.back()=='-'||a.back()=='*'||a.back()=='/')){

            while(a.back()!='('&&!a.empty()){

                b.push_back(a.back());a.pop_back();

            }

            a.push_back(x); return;

        }

        else if(x==')'){

            while(a.back()!='('){

                b.push_back(a.back());a.pop_back();

            }

            a.pop_back(); return;//pop '(';

        }

    }

}

int getres(vector&b,vector&res){

    for(auto i=b.begin();i

        if(*i-'0'>=0&&*i-'0'<=9){ res.push_back(*i-'0');}

        if(*i=='+'){int temp=*(res.end()-1)+*(res.end()-2); res.erase(res.end()-2,res.end());res.push_back(temp);}

        if(*i=='-'){int temp= *(res.end()-1)- *(res.end()-2);res.erase(res.end()-2,res.end());res.push_back(temp);}

        if(*i=='*'){int temp= *(res.end()-2)*(*(res.end()-1));res.erase(res.end()-2,res.end());res.push_back(temp);}

        if(*i=='/'){int temp =*(res.end()-2)/(*(res.end()-1));res.erase(res.end()-2,res.end());res.push_back(temp);}

    }

    return res.back();

}

int main(){

    string str;

    cout<<"输入表达式:n";

    while(cin>>str){

        vectora,b;

        vectorc;

        for(int i=0;i

            duqu(a,b,str[i]);

        }

        while(!a.empty()){

            b.push_back(a.back());a.pop_back();

        }

        for(auto i=b.begin();i< b.end();i++){

            cout<<*i<<" ";

        }

        cout<

        cout<

    }

    return 0;

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5658041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存