码迷,mamicode.com
首页 > 编程语言 > 详细

C++后缀表达式求值

时间:2017-08-25 12:11:47      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:turn   color   转换   结果   using   区分   操作   c++   post   

#include <iostream>
#include <stack>
using namespace std;
int cal(int a,int b,char c){
    if(c==+)  return a+b;
    else if(c==-)  return a-b;
    else if(c==*)  return a*b;
    else if(c==/)  return a/b;
    else return 0;
}

int postcal(char* post){
    stack <int > s;
    while(*post){
        if(*post >=0&& *post<=9){
            s.push(*post);
        }
        else{
            int a = s.top()-48;
            s.pop();
            int b = s.top()-48;
            s.pop();
            int c = cal(b,a,*post);
            s.push(c+48);
        }
        post++;
    }
    return s.top()-48;
}

int main(int argc, const char * argv[]) {
    char* post = new char;
    cin>>post;
    int res = postcal(post);
    cout<<"答案是:"<<res<<endl;
    return 0;
}

求解思想:

从左到右扫描输入的后缀表达式,若是数字则入栈;若是操作符,则从栈中取出两个数,进行相应计算后,将结果放回栈中,;扫描完后,栈顶剩余元素就是结果。

由于输入时并未区分数字和操作符,而是统一规定成了char 类型,所以要将每两个操作数计算的结果也要转换成ASCII码对应的字符类型,所以要进行+-48的操作。

也可以在一开始读取输入的时候就区分int类型和char类型,然后分开设栈。

C++后缀表达式求值

标签:turn   color   转换   结果   using   区分   操作   c++   post   

原文地址:http://www.cnblogs.com/whalelife/p/7427050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!