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

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

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

图片说明

二、我的代码

#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 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项