以下代码均已测试可行,如有不妥错误之处,欢迎指出,以免害人害己
括号匹配——栈的基础应用1
#include<stdio.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++)
{
switch(a[i])
{
case '(' ://与第三个选项相同处理
case '[' ://与第三个选项相同处理
case '{' :b[j++] = a[i]; break;
case ')' : if ( b[--j] != '(' )
flag = 1; break;
case ']' : if ( b[--j] != '[' )
flag = 1; break;
case '}' : if ( b[--j] != '{' )
flag = 1; break;
default : ;//其他字符略过
}
}
if(flag==0)
printf("\nYES\n");
if(flag==1)
printf("\nNO\n");
}
转化为栈
#include<stdio.h>
#include<stdlib.h>
#define Stack_Size 100
#define ElemType char
typedef struct Stack
{
ElemType base[Stack_Size];
inttop;
}SqStack;
int InitStack(SqStack *S)
{
S->top=-1;
return 1;
}
int Push(SqStack *S,ElemType e)
{
if(S->top >= Stack_Size-1)
return 0;
S->base[++(S->top)]=e;
return 1;
}
ElemType Pop(SqStack *S)
{
if(S->top==-1)
{
printf("栈空\n");
return ;
}
else
return S->base[(S->top)--];
}
int Check(SqStack *S,ElemType *p)
{
for(;*p!='\0';p++)
{
switch(*p)
{
case '(' : //与第三个选项相同处理
case '[' : //与第三个选项相同处理
case '{' : Push(S,*p); break;
case ')' : if ( Pop(S) !='(' )
return 0; break;
case ']' : if ( Pop(S) !='[' )
return 0; break;
case '}' : if ( Pop(S) !='{' )
return 0; break;
default : ;
}
}
if(S->top==-1)
return 1;
else
return 0;
}
int main()
{
SqStack S;
charp[50];
InitStack(&S);
scanf("%s",p);
if(Check(&S,p)==0)
printf("\nmismatch\n");
else
printf("\nmatched\n");
return 0;
}
bool CheckMatch(char s[]) { //检查表达式括号是否匹配
int flag1=0, flag2=0,flag3=0,i;
for(i=0; s[i]!=0; i++) {
switch(s[i])
{
case '(' : ++flag1;break;
case ')' : --falg1;break;
case '[' : ++flag2;break;
case ']' : --flag2;break;
case '{' : ++flag3;break;
case '}' : --flag3;break;
default : break;
}
}
if(flag1 == 0 && flag2 == 0 && flag3 == 0)
return true;
else
return false;
}