栈4--例1.2后缀表达式的值

【题目描述】

从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。

比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:

栈中的变化情况:

运行结果:-47

提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在264

范围内,如有除法保证能整除。

【输入】

一个后缀表达式。

【输出】

一个后缀表达式的值。

这个题目自己编译器可以成功,但是提交不成功,也不知道哪里出问题了

#include<cstdio>
#include <cstring>


using namespace std;

//数据初始化
int stack[101];
char s[249];

//处理函数
int cmp(char s[249]){
    //初始数据
    int i=0,top=0,x,y;

    //事务处理
    while(i<=strlen(s)-2){
        switch(s[i]){
            case '+':
              stack[--top]+=stack[top+1];
              break;
            case '-':
                stack[--top]-=stack[top+1];
                break;
            case '*':
                stack[--top]*=stack[top+1];
                break;
            case '/':
                stack[--top]/=stack[top+1];
                break;
            default:
                x=0;
                while(s[i]!=' '){
                    x=x*10+s[i++]-'0';
                }
                stack[++top]=x;
                break;
        }
        i++;
    }

    //返回数据
    return stack[top];
}

//主函数
int main(){
    //数据初始化
    gets(s);

    //事务处理
    int m=cmp(s);

    //输出数据
    printf("%d",m);
}
发布了120 篇原创文章 · 获赞 23 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qew2017/article/details/104896182
今日推荐