
c语言判断一字符串左右括号是否匹配的问题!求助
#include<stdio.h>#include<string.h>#definem20typedefcharElemType;typedefstruct{ElemTy...
#include<stdio.h>
#include<string.h>
#define m 20
typedef char ElemType;
typedef struct
{
ElemType stack[m];
int top;
}stacknode;
stacknode *sp;
Init(stacknode *st)
{
st->top=0;
return 0;
}
void Push(stacknode *st,ElemType x)
{
if(st->top==m)
printf("The stack is overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void Pop(stacknode *st)
{
st->top=st->top-1;
}
main()
{
char s[m];
int i;
printf("Creat a stack!\n");
Init(sp);
printf("Input a expression:\n");
gets(s);
for(i=0;i<strlen(s);i++)
{
if(s[i]=='(')
Push(sp,s[i]);
if(s[i]==')')
Pop(sp);
}
if(sp->top==0)
printf("左右括号是匹配的!\n");
else
printf("左右括号是不匹配的!\n");
}
不知为什么运行时总是出现“。。。已停止工作!”求高手指教 展开
#include<string.h>
#define m 20
typedef char ElemType;
typedef struct
{
ElemType stack[m];
int top;
}stacknode;
stacknode *sp;
Init(stacknode *st)
{
st->top=0;
return 0;
}
void Push(stacknode *st,ElemType x)
{
if(st->top==m)
printf("The stack is overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void Pop(stacknode *st)
{
st->top=st->top-1;
}
main()
{
char s[m];
int i;
printf("Creat a stack!\n");
Init(sp);
printf("Input a expression:\n");
gets(s);
for(i=0;i<strlen(s);i++)
{
if(s[i]=='(')
Push(sp,s[i]);
if(s[i]==')')
Pop(sp);
}
if(sp->top==0)
printf("左右括号是匹配的!\n");
else
printf("左右括号是不匹配的!\n");
}
不知为什么运行时总是出现“。。。已停止工作!”求高手指教 展开
3个回答
展开全部
由于没有分配空间,,,修改如下
#include<stdio.h>
#include<string.h>
#include <stdlib.h> // !!!分配内存头文件
#define m 20
typedef char ElemType;
typedef struct
{
ElemType stack[m];
int top;
}stacknode;
stacknode *sp;
Init(stacknode *st)
{
st->top=0;
return 0;
}
void Push(stacknode *st,ElemType x)
{
if(st->top==m)
printf("The stack is overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void Pop(stacknode *st)
{
st->top=st->top-1;
}
main()
{
char s[m];
int i;
printf("Creat a stack!\n");
sp = (stacknode *)malloc(sizeof(stacknode)); // !!!添加的语句
Init(sp);
printf("Input a expression:\n");
gets(s);
for(i=0;i<strlen(s);i++)
{
if(s[i]=='(')
Push(sp,s[i]);
if(s[i]==')')
Pop(sp);
}
if(sp->top==0)
printf("左右括号是匹配的!\n");
else
printf("左右括号是不匹配的!\n");
}
#include<stdio.h>
#include<string.h>
#include <stdlib.h> // !!!分配内存头文件
#define m 20
typedef char ElemType;
typedef struct
{
ElemType stack[m];
int top;
}stacknode;
stacknode *sp;
Init(stacknode *st)
{
st->top=0;
return 0;
}
void Push(stacknode *st,ElemType x)
{
if(st->top==m)
printf("The stack is overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void Pop(stacknode *st)
{
st->top=st->top-1;
}
main()
{
char s[m];
int i;
printf("Creat a stack!\n");
sp = (stacknode *)malloc(sizeof(stacknode)); // !!!添加的语句
Init(sp);
printf("Input a expression:\n");
gets(s);
for(i=0;i<strlen(s);i++)
{
if(s[i]=='(')
Push(sp,s[i]);
if(s[i]==')')
Pop(sp);
}
if(sp->top==0)
printf("左右括号是匹配的!\n");
else
printf("左右括号是不匹配的!\n");
}
展开全部
Init(stacknode *st) 没返回值,
stacknode *sp; 应该分配内存空间,即
stacknode *sp=new stacknode ;
stacknode *sp; 应该分配内存空间,即
stacknode *sp=new stacknode ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Init(stacknode *st) //你用的是turbo c这个能通过编译
{ //返回的返回类型没写,函数体内却有return
st->top=0;
return 0;
}
关键的错误是指针没有初始化。
Init(sp); //sp永远指向垃圾值
{ //返回的返回类型没写,函数体内却有return
st->top=0;
return 0;
}
关键的错误是指针没有初始化。
Init(sp); //sp永远指向垃圾值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询