#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1
#define Stack_Size 50
typedef char StackElementType;
typedef struct
{
StackElementType elem[Stack_Size];
int top;
}SeqStack; //定义栈
void InitStack(SeqStack *S)
{
S->top = -1;
} //初始化
int Push(SeqStack *S,StackElementType X)
{
if(S->top==Stack_Size-1)
return 0;
S->top++;
S->elem[S->top]=X;
return TRUE;
} //顺序进栈
int Pop(SeqStack *S,StackElementType *X)
{
if(S->top==-1)
return 0;
else
{
*X=S->elem[S->top];
S->top--;
return TRUE;
}
} //顺序出栈
int GetTop(SeqStack *S,StackElementType *x)
{
if(S->top==-1)
return 0;
else
{
*x=S->elem[S->top];
return TRUE;
}
} //读取栈顶元素
int Match(char ch,char str)
{
if(ch=='('&&str==')')
{return TRUE;}
else if(ch=='['&&str==']')
{return TRUE;}
else if(ch=='{'&&str=='}')
{return TRUE;}
else
return 0;
}
int IsEmpty(SeqStack *S)
{
if(S->top==-1)
return 1;
return 0;
}
void BracketMatch(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;}
else
{
GetTop(&S,&ch);
if(Match(ch,str[i]))
Pop(&S,&ch);
else
{printf("\n对应的括号不同类!");return;}
}
}
}
if(IsEmpty(&S))
printf("括号匹配\n");
else
printf("\n左括号多余");
}
void main()
{
char str[6];
gets(str);
BracketMatch(str);
}
用C实现括号编译器
最新推荐文章于 2022-06-06 17:20:53 发布