Heim  >  Artikel  >  Datenbank  >  逆波兰表达式学习日记(2)

逆波兰表达式学习日记(2)

WBOY
WBOYOriginal
2016-06-07 15:33:151068Durchsuche

鉴于今天星期三,下午常规没课。而且后缀求结果也挺简单的,就先把这个写完吧。 之前已经转化完了表达式,现在只要把一群数字和加减乘除运算一下就OK了(说实话,有点懒了,最近长春PM2.5有点高,我根本就没有兴趣搞ACM嘛) int change(char *a) { stack int

鉴于今天星期三,下午常规没课。而且后缀求结果也挺简单的,就先把这个写完吧。

之前已经转化完了表达式,现在只要把一群数字和加减乘除运算一下就OK了(说实话,有点懒了,最近长春PM2.5有点高,我根本就没有兴趣搞ACM嘛)

int change(char *a)
{
    stack t;
    int i=0;
    while(a[i]!='\0')
    {
        if(a[i]>='0'&&a[i]         {
            t.push((int)a[i++]-'0');
        }
        else
        {
            int num1,num2;
            num1=t.top();t.pop();
            num2=t.top();t.pop();
            switch(a[i++])                             //有运算符的话,先把数字取出来,然后运算后的结果压进去
            {
                case '+':num1+=num2;t.push(num1);break;
                case '-':num2-=num1;t.push(num2);break;
                case '*':num1*=num2;t.push(num1);break;
                case '/':num2/=num1;t.push(num2);break;
            }
        }
    }
    return t.top();                                   //最后,栈内留下的最后一个数就是你要的结果啦
}

因为有点想看看数据结构后面的东西了,所以有点着急结束,这两个函数只能针对个位数的运算,没有在后缀表达式插入空行来区分数字,那就留着我之后再去写吧。。(困)

over

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn