括号匹配
3.3.1栈在括号匹配中的应用 假设表达式中允许包含三种括号:圆括号,中括号,大括号。其嵌套的顺序任意,例如{)()})匹配失败 ([])(){} 匹配成功!!!
#include<stdio.h>
#define Maxsize 10
typedef struct {
char data[Maxsize];
int top;
}SqStact;
void InitStact(SqStact &S){
S.top=0;
}
bool Emptystact(SqStact S){
if(S.top==0) return true;
else return false;
}
bool Push(SqStact &S,char c){
if(S.top==Maxsize) return false;
S.data[S.top]=c;
S.top++;
return true;
}
bool Pop(SqStact &S,char &c){
if(S.top==0) return false;
S.top--;
c=S.data[S.top];
return true;
}
bool bracketCheck(char str[],int length){
SqStact S;
InitStact(S);
for(int i=0;i<length;i++)
{
if(str[i]=='('||str[i]=='{'||str[i]=='['){
Push(S,str[i]);
}
else{
if(Emptystact(S)) return false;
char Topelem;
Pop(S,Topelem);
if(str[i]==')'&&Topelem!='(')
return false;
if(str[i]==']'&&Topelem!='[')
return false;
if(str[i]=='}'&&Topelem!='{')
return false;
}
}
return Emptystact(S);
}
int main(){
char str[10];
scanf("%s",str);
for(int i=0;i<10;i++){
printf("%c",str[i]);
}
printf("\n");
if(bracketCheck(str,10)){
printf("括号匹配成功!");
}
else printf("括号匹配失败!");
return 0;
}
运行演示
|