問題串連……
#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 chartypedef 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");}