主题:[讨论]哪位高手帮改一下,谢谢(括号匹配)
#include <stdio.h>
#include <malloc.h>
#define M 100
typedef struct
{
int str[M];
int top;
}Seqstack;
void InitStack(Seqstack *s)
{
s->top=-1;
}
/*判栈空*/
int IsEmpty(Seqstack *S) /*判断栈S为空栈时返回值为真,反之为假*/
{
return(S->top==-1?0:1);
}
/*判栈满*/
int IsFull(Seqstack *S) /*判断栈S为满栈时返回值为真,反之为假*/
{
return(S->top==99?1:0);
}
int push(Seqstack *s,char x)
{
if(s->top==M-1)
return 0;
s->top++;
s->str[s->top]=x;
return 1;
}
int pop(Seqstack *s,char *x)
{
if(s->top=-1)
return 0;
else
{
*x=s->str[s->top];
s->top--;
}
}
int gettop(Seqstack *s,char *x)
{
if(s->top==-1)
return 0;
else
{
*x=s->str[s->top];
return 1;
}
}
int isempty(Seqstack *s)
{
if(s->top==-1)
return 1;
else 0;
}
int match(char ch,char str)
{
if(ch=='(' && str==')')
{
return 1;
}
else if(ch=='[' && str==']')
{
return 1;
}
else if(ch=='{' && str=='}')
{
return 1;
}
else
return 0;
}
int BrackeMatch(char *str)
{
Seqstack *s;
int i;char ch;
InitStack(s);
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case'(':
case'[':
case'{':
push(s,str[i]);
break;
case')':
case']':
case'}':
if(isempty(s))
{printf("\n右括号多余!");return 0;}
else
{
gettop(s,&ch);
if(match(ch,str[i]))
pop(s,&ch);
else
{printf("\n对应的左右括号不同类!");return 0;}
}
}
}
if(isempty(s))
printf("匹配!");
else
printf("\n不匹配!");
}
void main()
{
int i;
char x;
char str[100];
printf("请输入括号: \n");
gets(str);
BrackeMatch(str);
}
不知道错在哪里,希望可以解释下。谢啦
#include <malloc.h>
#define M 100
typedef struct
{
int str[M];
int top;
}Seqstack;
void InitStack(Seqstack *s)
{
s->top=-1;
}
/*判栈空*/
int IsEmpty(Seqstack *S) /*判断栈S为空栈时返回值为真,反之为假*/
{
return(S->top==-1?0:1);
}
/*判栈满*/
int IsFull(Seqstack *S) /*判断栈S为满栈时返回值为真,反之为假*/
{
return(S->top==99?1:0);
}
int push(Seqstack *s,char x)
{
if(s->top==M-1)
return 0;
s->top++;
s->str[s->top]=x;
return 1;
}
int pop(Seqstack *s,char *x)
{
if(s->top=-1)
return 0;
else
{
*x=s->str[s->top];
s->top--;
}
}
int gettop(Seqstack *s,char *x)
{
if(s->top==-1)
return 0;
else
{
*x=s->str[s->top];
return 1;
}
}
int isempty(Seqstack *s)
{
if(s->top==-1)
return 1;
else 0;
}
int match(char ch,char str)
{
if(ch=='(' && str==')')
{
return 1;
}
else if(ch=='[' && str==']')
{
return 1;
}
else if(ch=='{' && str=='}')
{
return 1;
}
else
return 0;
}
int BrackeMatch(char *str)
{
Seqstack *s;
int i;char ch;
InitStack(s);
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case'(':
case'[':
case'{':
push(s,str[i]);
break;
case')':
case']':
case'}':
if(isempty(s))
{printf("\n右括号多余!");return 0;}
else
{
gettop(s,&ch);
if(match(ch,str[i]))
pop(s,&ch);
else
{printf("\n对应的左右括号不同类!");return 0;}
}
}
}
if(isempty(s))
printf("匹配!");
else
printf("\n不匹配!");
}
void main()
{
int i;
char x;
char str[100];
printf("请输入括号: \n");
gets(str);
BrackeMatch(str);
}
不知道错在哪里,希望可以解释下。谢啦