#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
//声明结构体
typedef struct bracketmatch{
int elem[maxsize];
int last;
}backetmatch;
//初始化战
void init(backetmatch &L){
L.last=-1;
}
//判断是否为空栈
bool analysempty(backetmatch &L){
if(L.last==-1) return true;
else return false;
}
//入栈
bool push(backetmatch &L,char x){
if(L.last+2!=maxsize){
L.elem[++L.last]=x;
return true;}
else return false;
}
//出栈
bool pop(backetmatch &L,char &x){
if(!analysempty(L)){
x=L.elem[L.last--];
return true;
}
else return false;
}
//括号匹配
bool backmatch(backetmatch &L,char *backetstr){
int length;
char x;//栈顶弹出值
length=strlen(backetstr);
for(int i=0;i<length;i++){
if(backetstr[i]=='('||backetstr[i]=='['||backetstr[i]=='{'){
push(L,backetstr[i]);
}
else{
if(analysempty(L))return false;
if(backetstr[i]==')'){
pop(L,x);
if(x!='(')return false;
}
if(backetstr[i]=='}'){
pop(L,x);
if(x!='{')return false;
}
if(backetstr[i]==']'){
pop(L,x);
if(x!='[')return false;
}
}
}
return analysempty(L);
}
//主函数
int main(void){
//申明一个栈,括号串,括号串长度
backetmatch L;
char backetstr[50]="()()[]{[]}";
init(L);
if(backmatch(L,backetstr)) printf("匹配成功!");
else printf("匹配失败!");
return 0;
}
10-05
1482
