回 帖 发 新 帖 刷新版面

主题:[讨论]哪位高手帮改一下,谢谢(括号匹配)

#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);
}



不知道错在哪里,希望可以解释下。谢啦

回复列表 (共2个回复)

沙发

这是我才上机我运行通过的,自己可以对照改下,OK:
#include <stdio.h>
#include <string.h>
# define stacksize 100

typedef struct segstack
{char data[stacksize];
int top;
}segstack;

void initstack(segstack *s)
{s->top=-1;}

int stackempty(segstack *s)
{return(s->top==-1);}

int stackfull(segstack *s)
{return(s->top==stacksize-1);}

void push(segstack *s,char p)
{if(stackfull(s))
printf("stack if full\n");
else
s->data[++s->top]=p;
}

char pop(segstack *s)
{char e;
if(stackempty(s))
printf("stack is empty\n");
else
{e=s->data[s->top];
s->top--;
return (e);
}
}

char stacktop(segstack *s)
{if(stackempty(s))
printf("stack is empty\n");
else
return(s->data[s->top]);
}

main()
{segstack *s;
char ch,q;
int t=1;
initstack(s);
ch=getchar();
while(ch!='#')
 {switch(ch)
  {case '(':push(s,ch);break;
   case '[':push(s,ch);break;
   case '{':push(s,ch);break;
   case ')':if(stacktop(s)=='(')q=pop(s);else t=0;break;
   case ']':if(stacktop(s)=='[')q=pop(s);else t=0;break;
   case '}':if(stacktop(s)=='{')q=pop(s);else t=0;break;
   default :break;
   }if(t==0)
    break;
    else
    ch=getchar();
 }
 if(!stackempty(s)||t==0)
 printf("not success\n");
 else
 printf("success\n");
 }

板凳

这个网站上有习题及详细的答案http://jsjzs.any2000.com/自己去看吧!

我来回复

您尚未登录,请登录后再回复。点此登录或注册