#include<stdio.h> #include<conio.h> void main() { char a[50],b[50]; int i,j,flag; flag=i=j=0; gets(a); for(i=0;a[i]!='\0';i++) { if(a[i]=='(') b[j++]=1; if(a[i]==')') if(b[--j]!=1) { flag=1; break; } if(a[i]=='[') b[j++]=2; if(a[i]==']') if(b[--j]!=2) { flag=1; break; } if(a[i]=='{') b[j++]=3; if(a[i]=='}') if(b[--j]!=3) { flag=1; break; } } if(flag==0) printf("\nYES\n"); if(flag==1) printf("\nNO\n"); getch(); }
栈方法……
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define Stack_Size 100 #define ElemType char typedef struct Stack { ElemType base[Stack_Size]; int top; }SqStack; int InitStack(SqStack *S)/* 初始化栈 */ { S->top=-1; return OK; } int Push(SqStack *S,ElemType e)/* 进栈操作 */ { if(S->top>=Stack_Size-1) return ERROR; S->top++; S->base[S->top]=e; return OK; } int Pop(SqStack *S)/* 出栈操作 */ { if(S->top==-1) return ERROR; S->top--; return OK; } char convert(ElemType e)/* 如果左括号则转换成右返回 */ { if(e=='{') e='}'; if(e=='[') e=']'; if(e=='(') e=')'; return e; } int Check(SqStack *S,ElemType *p)/* 检查匹配括号函数 */ { while(*p!='\0') { if(*p=='{'||*p=='['||*p=='(')/* 如果是左括号则转换成右括号存入栈中 */ if(Push(S,convert(*p))==0) return ERROR; if(*p=='}'||*p==']'||*p==')')/* 如果是右括号且与最近存入栈中的括号相同则出栈一个元素,不同则不匹配。不是右括号则继续检查匹配 */ { if(*p==S->base[S->top]) { if(Pop(S)==0) return ERROR; } else return ERROR; } p++; } if(S->top==-1)/* 如果S->top==-1则表示所有括号匹配完,即完全匹配。否则,还有未匹配完的 */ return OK; else return ERROR; } void main() { SqStack S; char p[50]; InitStack(&S); scanf("%s",p); if(Check(&S,p)==0) printf("\nmismatch\n"); else printf("\nmatched\n"); }