真难啊!!!!!!! 2022-11-14 17:24
浏览 21
已结题

中缀表达式pta上报段错误,Devc++可以运行,如何解决?

问题遇到的现象和发生背景

在pta中缀表达式转后缀表达式题,运行代码报错段错误,但在DeVC++上就能运行

用代码块功能插入代码,请勿粘贴截图

#include <stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define Maxsize 20
char str[Maxsize];
char suffix_str[Maxsize];

typedef struct SNode *Stack;
struct SNode
{
int top;
char data[Maxsize];
};
Stack S_create()
{
Stack S;
S=(Stack)malloc(sizeof(struct SNode));
S->top=-1;
return S;
}

void push(Stack S,char p)
{
S->top++;
S->data[S->top]=p;
}
char pop(Stack S)
{
char ch;
ch=S->data[S->top];
S->top--;
return ch;
}
int order(char ch)
{
if(ch=='-'||ch=='+')
return 1;
if(ch==''||ch=='/')
return 2;
if(ch=='(')
return 0;
}
void pri_str(char str1[])
{
int i=0;
for(i=0;str1[i+1]!='\0';i++)
{
printf("%c ",str1[i]);
}
printf("%c",str1[i]);
return ;
}
int main()
{
Stack s;
s=S_create();
int i=0,j=0;
scanf("%s",str);
for(i=0;str[i]!='\0';i++)
{
if(isdigit(str[i]))
{
suffix_str[j]=str[i];
j++;
}
else if(str[i]=='-'||str[i]=='+')
{
while(order(str[i])<=order(s->data[s->top]))
{
suffix_str[j]=pop(s);
j++;
}
push(s,str[i]);
}
else if(str[i]=='
'||str[i]=='/')
{
push(s,str[i]);
}
else if(str[i]=='(')
push(s,str[i]);
else if(str[i]==')')
{
while(s->data[s->top]!='(')
{
suffix_str[j]=pop(s);
j++;
}
s->top--;
}
}
while(s->top!=-1)
{
suffix_str[j]=pop(s);
j++;
}
pri_str(suffix_str);
return 0;
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

发现在PTA测试用例上较短表达式可以转换成功,如2+8/4,但表达式较长就无法转换

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月22日
    • 修改了问题 11月14日
    • 创建了问题 11月14日

    悬赏问题

    • ¥15 CBF预处理数据归一化的时候报错了如下图
    • ¥15 qt 转 msvc 后 Opencv 始终打不开视频!
    • ¥15 yolo v5中labelimg的作用
    • ¥15 国赛c题2021,没有理解这一串代码的意思,这样报错该怎么解决(语言-matlab)
    • ¥15 一、执行完中断程序后如何继续运行,二、中断结束后如何跳过中断触发前的点位(LOW点不要继续运行,可以运行UP点)(关键词-程序运行)
    • ¥15 if为什么跳过if 直接执行else 中文
    • ¥200 解决登录微信老版本限制封号问题
    • ¥15 mysql中时间处理问题
    • ¥20 讲解此音频放大电路原理及关键部分
    • ¥15 rtsp 转 m3u8 执行后卡在Decoding VUI