美文网首页
表达式计算c++

表达式计算c++

作者: 小白之白小明 | 来源:发表于2017-03-02 13:45 被阅读211次

    问题描述
      输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。
    输入格式
      输入一行,包含一个表达式。
    输出格式
      输出这个表达式的值。
    样例输入
    1-2+3*(4-5)
    样例输出
    -4
    数据规模和约定
      表达式长度不超过100,表达式运算合法且运算过程都在int内进行。

    用到了栈的知识,数字建一个栈,符号建一个栈。然后根据符号先后顺序比较,出栈入栈进行计算。

    #include<iostream>
    #include<string>
    #include<stack>
    using namespace std;  
    char s[110];  
    char pre[7][7]={  
        {'>','>','<','<','<','>','>'},  
        {'>','>','<','<','<','>','>'},  
        {'>','>','>','>','<','>','>'},  
        {'>','>','>','>','<','>','>'},  
        {'<','<','<','<','<','=','0'},  
        {'>','>','>','>','0','>','>'},  
        {'<','<','<','<','<','0','='}};  
    char procede(char a,char b)  
    {  
        int i,j;  
        switch(a)  
        {  
            case'+':i=0;break;  
            case'-':i=1;break;  
            case'*':i=2;break;  
            case'/':i=3;break;  
            case'(':i=4;break;  
            case')':i=5;break;  
            case'#':i=6;break;  
        }  
        switch(b)  
        {  
            case'+':j=0;break;  
            case'-':j=1;break;  
            case'*':j=2;break;  
            case'/':j=3;break;  
            case'(':j=4;break;  
            case')':j=5;break;  
            case'#':j=6;break;  
        }  
        return pre[i][j];  
    }     
    int operate(int m,int n,char x)  
    {  
        if(x=='+')  
        return m+n;  
        if(x=='-')  
        return n-m;  
        if(x=='*')  
        return m*n;  
        if(x=='/')  
        return n/m;  
    }  
    int main()
    {
        int k,y;
        stack <int> shu;
        stack <char> fu;
        char c;
        char ss[2]="#";
        fu.push('#');
        cin>>s;
        strcat(s,ss);
        c=s[0];
        k=1;
        while(c!='#'||fu.top()!='#')  
        {  
            y=0;  
            if(c>='0'&&c<='9')  
            {  
                while(c>='0'&&c<='9')  
                {  
                    y=y*10+(c-'0');  
                    c=s[k++];  
                }  
                shu.push(y);  
            }
            else
            {
                switch(procede(fu.top(),c))  
                {  
                    case'<':  
                        fu.push(c);  
                        c=s[k++];  
                        break;  
                    case'=':  
                        fu.pop();  
                        c=s[k++];  
                        break;  
                    case'>':  
                        char x=fu.top();fu.pop();  
                        int m=shu.top();shu.pop();  
                        int n=shu.top();shu.pop();  
                        shu.push(operate(m,n,x));  
                        break;    
                } 
            }
        }
        cout<<shu.top();
        system("pause");
        return 0;
    }```

    相关文章

      网友评论

          本文标题:表达式计算c++

          本文链接:https://www.haomeiwen.com/subject/nowhgttx.html