viency13 2023-06-08 11:38 采纳率: 68.8%
浏览 50
已结题

这个为什么会段错误啊

7-5 逆波兰表达式求值
分数 8
作者 李廷元
单位 中国民用航空飞行学院
逆波兰表示法是一种将运算符(operator)写在操作数(operand)后面的描述程序(算式)的方法。举个例子,我们平常用中缀表示法描述的算式(1 + 2)*(5 + 4),改为逆波兰表示法之后则是1 2 + 5 4 + *。相较于中缀表示法,逆波兰表示法的优势在于不需要括号。

请输出以逆波兰表示法输入的算式的计算结果。

输入格式:
在一行中输入1个算式。相邻的符号(操作数或运算符)用1个空格隔开。

输出格式:
在一行中输出计算结果。

限制:
2≤算式中操作数的总数≤100

1≤算式中运算符的总数≤99

运算符仅包括“+”、“-”、“*”,操作数、计算过程中的值以及最终的计算结果均在int范围内。

输入样例1:
4 3 + 2 -
输出样例1:
5
输入样例2:
1 2 + 3 4 - *
输出样例2:
-3


```c++
#include <iostream>
using namespace std;

typedef struct
{
    char *top;
    char *base;
}Stack;

void init ( Stack &S )
{
    S.base = new char[1000];
    S.top = S.base;
}

void push ( Stack &S, char c )
{
    *S.top++ = c;
}

char pop ( Stack &S )
{
    char c;
    c = * --S.top;
    return c;
}
int main ()
{
    Stack S;
    init (S);
    char c;
    while (1)
    {
        cin >> c;
        char num;
        if ( c != EOF )
        {
            if ( c != '+' && c != '-' && c != '*' )
            {
                push (S, c);
            }
            else
            {
                char c1, c2;
                c1 = pop (S);
                c2 = pop (S);
                if ( c == '+' )
                {
                    num = c1 + c2;
                }
                if ( c == '-' )
                {
                    num = c2 - c1;
                }
                if ( c == '*' )
                {
                    num = c1 * c2;
                }
                push (S, num);
            }
        }
        else
        {
            cout << num;
        }
    }
    return 0;
}


```

  • 写回答

2条回答 默认 最新

  • 新_兰 2023-06-08 12:15
    关注

    首先pop没有判空,而且你这样写肯定不对啊,你char直接运算+-*得到的结果肯定不是我们想要的结果,而且可能超

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月8日
  • 创建了问题 6月8日

悬赏问题

  • ¥15 在matlab中Application Compiler后的软件无法打开
  • ¥15 想问一下STM32创建工程模板时遇到得问题
  • ¥15 Fiddler抓包443
  • ¥20 Qt Quick Android 项目报错及显示问题
  • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
  • ¥15 oracleBIEE analytics
  • ¥15 H.264选择性加密例程
  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 安装CentOS6时卡住