番茄pai酱 2020-07-22 15:17 采纳率: 66.7%
浏览 80

中缀表达式转为后缀表达式,一些结果莫名其妙的错误

一、后缀表达式转中缀表达式

图片说明

二、我的代码

#include<stdio.h>
#define N 200

//栈结构
typedef struct Stack{
    int top;
    char stack[N];
}Stack;
//栈初始化
void Init_Stack(Stack *s)
{
    int i;
    for(i = 0; i < N; i++)
        s->stack[i] = '\0';
    s->top = 0;
}
//判空
int Is_Empty(Stack *s)
{
    if(s->top == 0)
        return 1;
    else
        return 0;
}
//入栈
void Push_Stack(Stack *s, char ele)
{
    if (s->top == N)
        printf("栈满了!\n");
    else
    {
        s->stack[s->top] = ele;
        s->top++;
    }
}
//出栈
char Pop_Stack(Stack *s)
{
    //本题无需在此判空,函数外再判空
    s->top--;
    return s->stack[s->top];
}
//查看栈顶元素
char Search_Stack(Stack *s)
{
    return s->stack[s->top - 1];
}
//判断运算符优先级
char Priority(char a, char b)
{
    if (b == '(' || b == ')')
        return '>';
    if (a == '+' || a == '-')
        return '<';
    else
    {
        if ( (a == '*' || a == '/') && (b == '*' || b == '/'))
            return '<';
        else
            return '>';
    }           
}

int main()
{
    char equ[N];
    Stack opr;
    int i;
    while(scanf("%s", equ) != EOF)
    {
        Init_Stack(&opr);
        for(i=0; i < N; i++)
        {
            if((equ[i] >= 'A' && equ[i] <= 'Z') || (equ[i] >= 'a' && equ[i] <= 'z'))
                printf("%c", equ[i]);
            else
            {
                if(Is_Empty(&opr))
                    Push_Stack(&opr, equ[i]);
                else if(equ[i] == '(')
                {
                    Push_Stack(&opr, equ[i]);
                }
                else if(equ[i] == ')')
                {
                    while(Search_Stack(&opr) != '(')
                    {   
                        printf("%c", Pop_Stack(&opr));
                    }
                    Pop_Stack(&opr);
                }
                else if(equ[i] == '\0')
                {
                    while(!Is_Empty(&opr))
                        printf("%c", Pop_Stack(&opr));
                    break;
                }
                else if(Priority(equ[i], Search_Stack(&opr)) == '>')
                    Push_Stack(&opr, equ[i]);
                else
                {
                    printf("%c", Pop_Stack(&opr));
                    i--;
                }
            }
        }
    }

    return 0;
}

三、报错信息

报错表示了,其中两个样式错误了,可我跟答案对比一样啊,不知道为什么错了?

图片说明

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-07-31 11:17
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条
  • ¥15 Python报错怎么解决
  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了