【栈的应用】表达式求值

                                                           表达式求值

前言

就在上一周,我对表达式求值死磕(差不多打了1000多行吧),但还是没做对,我只得死等到周六,去把这道题问我那位万能的盆友,在那位盆友的只支持2种符号(+,)的基础上扩了一点代码把它改为4则运算(+,-,,/)但是只有49行!

关于思路

这道题在网上有很多题解,而且都在200多行左右,虽然人家有注释但是这么多你想理解人家的思路吗?所以越精简越好.
网上,书上,通常会定义数字栈和字符栈 在此项目中也需要定义两个栈.此题也利用了c++的特性,在循环中直接输入cin>>a; (完整:while(cin>>a))
循环中如果是*,/直接运算,如果是+,-将字符入字符栈,数字栈入刚输入的数.最后定一个循环,如果现在字符栈是+则计算此值与下一个值的和,减法也同理。

代码

#include <iostream>
using namespace std;
int s[1001];
char b[1001];
int main()
{

    int a,top=0,t=0;
    char k;
    cin>>a;
    s[0]=a;
    while(cin>>k)
    {
        cin>>a;
        if(k=='*')
        {
            s[top]=s[top]*a;
        }
        else if(k=='/')
        {  
            s[top]=s[top]/a; 
        }
        else
        {
            top++;
            s[top]=a;
        }
        if(k=='+'||k=='-')
        {
            t++;
            b[t]=k;


        }       
    }
    t++;
    for(;top>0;top--)
    {

        if(b[t]=='+')
        s[top-1]=s[top]+s[top-1];
        if(b[t]=='-')
        s[top-1]=s[top]+s[top-1];
        t--;
    }
    cout<<s[0];
    return 0;
}

!!!使用代码注意:此代码运行输入完输入换行之后需输入两次ctrl+D换行才会有结果(输入输出流不用).

posted @ 2018-06-17 09:03  SMALLff  阅读(120)  评论(0编辑  收藏  举报