输入一个表达式,表达式中包括三种括号“()”、“[]”和“{}”,判断该表达式的括号是否匹配。
没达到输出那个括号出错的目的,不过也能判断是否正确了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct SqStack{
char *base;
int top;
int stacksize;
}SqStack;
void InitStack(SqStack &S)
{//构造一个空的栈
S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(SqStack));
if(!S.base)
exit(0);
S.top=0;
S.stacksize=STACK_INIT_SIZE;
}
int Push(SqStack &S,char e)
{//元素进栈
if(S.top>=S.stacksize-1)
{
S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SqStack));
}
S.base[S.top]=e;
S.top++;
if(S.base[S.top-1]==e)
return 1;
else
return 0;
}
int pop(SqStack &S,char &e)
{//元素出栈
if(S.top >= 1)
{
S.top--;
e=S.base[S.top];
return 1;
}
return 0;
}
int judge(SqStack &S,int cnt,char *a)
{
char tt;
int n;
for(int i=0;i<cnt;i++)
{
if(a[i] == '(' || a[i] == '[' || a[i] == '{')
{
Push(S,a[i]);
}
else
{
n=S.top-1;
if(n<0)
return 0;
pop(S,tt);
if( ( a[i]==')'&&tt=='(' ) || ( a[i]==']'&&tt=='[' ) || ( a[i]=='}'&&tt=='{' ) )
{
}
else
return 0;
}
}
if(S.top!=0)
return 0;
return 1;
}
int main()
{
SqStack S;
int n,cnt;
char a[1000];
char tmp;
InitStack(S);
printf("请输入你要判断的这些括号\n");
gets(a);
cnt=strlen(a);
if(judge(S,cnt,a))
printf("格式正确\n");
else
printf("格式错误\n");
return 0;
}