#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");
}