表达式求值

来源:互联网 发布:windows打war包 编辑:程序博客网 时间:2024/05/29 03:46
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<stack>#include<queue>#include<map>#include<cmath>#include<cstdlib>using namespace std;stack<int> number;stack<char> oper;string s;int main(){    cin>>s;    s+=')';    oper.push('(');    for(int i=0;i<s.length();)    {        if(s[i]>='0'&&s[i]<='9')        {            int num=0;            while(s[i]>='0'&&s[i]<='9')            {                num*=10;                num+=s[i]-'0';i++;            }            number.push(num);            continue;        }        else        {            if(s[i]=='+'||s[i]=='-')            {                if(oper.top()=='(')                    oper.push(s[i]);                else                {                    int number1,number2;                    number1=number.top();                    number.pop();                    number2=number.top();                    number.pop();                    if(oper.top()=='+')                        number.push(number1+number2);                    else if(oper.top()=='-')                        number.push(number2-number1);                    else if(oper.top()=='*')                        number.push(number1*number2);                    else                        number.push(number2/number1);                    oper.pop();                    oper.push(s[i]);                }                i++;            }            else if(s[i]=='*'||s[i]=='/')            {                if(oper.top()=='('||oper.top()=='+'||oper.top()=='-')                    oper.push(s[i]);                else                {                    int number1,number2;                    number1=number.top();                    number.pop();                    number2=number.top();                    number.pop();                    if(oper.top()=='+')                        number.push(number1+number2);                    else if(oper.top()=='-')                        number.push(number2-number1);                    else if(oper.top()=='*')                        number.push(number1*number2);                    else                        number.push(number2/number1);                    oper.pop();                    oper.push(s[i]);                }                i++;            }            else if(s[i]==')')            {                if(oper.top()=='(')                {                    oper.pop();                    i++;                }                else                {                    int number1,number2;                    number1=number.top();                    number.pop();                    number2=number.top();                    number.pop();                    if(oper.top()=='+')                        number.push(number1+number2);                    else if(oper.top()=='-')                        number.push(number2-number1);                    else if(oper.top()=='*')                        number.push(number1*number2);                    else                        number.push(number2/number1);                    oper.pop();                }            }            else if(s[i]=='(')            {                oper.push(s[i]);                i++;            }        }    }    printf("%d\n",number.top());    return 0;}

0 0
原创粉丝点击