左括号直接入栈,遇见右括号,从栈顶取出元素,进行匹配,最后判断栈是否为空即可!
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top;
} SqStack;
bool InitStack(SqStack *s)
{
s->top=-1;//初始化栈
}
bool Push(SqStack *s,ElemType e)
{
if(s->top==MaxSize-1)return false;
s->data[++s->top]=e;
return true;
}
bool Pop(SqStack *s,ElemType *e)
{
if(s->top==-1)return false;
*e=s->data[s->top--];
return true;
}
void PrintStack(SqStack *s)
{
int i=0;
for(int i=0; i<=s->top; i++)
{
printf("%d-->",s->data[i]);
}
printf("\n");
}
//判断栈是否为空
bool EmptyStack(SqStack *s)
{
if(s->top==-1)return true;
return false;
}
bool BracketsCheck(char *str)
{
SqStack s;
InitStack(&s);
int i=0;
char e;
while(str[i]!='\0')
{
switch(str[i])
{
//左括号匹配
case '(':
Push(&s,'(');
break;
case '[':
Push(&s,'[');
break;
case '{':
Push(&s,'{');
break;
//右括号检测栈顶
case')':
Pop(&s,&e);
if(e!='(') return false;
break;
case ']':
Pop(&s,&e);
if(e!='[')return false;
break;
case '}':
Pop(&s,&e);
if(e!='{')return false;
break;
default: break;
}
i++;
}
if(!EmptyStack(&s))
{
printf("括号不匹配\n");
return false;
}
else
{
printf("括号匹配\n");
return true;
}
}
int main()
{
char d[12];
char *p;//p为字符数组
printf("请输入匹配表达式\n");
gets(d);
p=d;
printf("%d",BracketsCheck(p));
return 0;
}