数据结构实验之栈与队列四:括号匹配
Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Sample
Input
sin(20+10) {[}]
Output
yes no
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int date[52]; //初始化栈的大小 6 int main() 7 { 8 char a[55]; 9 int i,top,base,len; 10 while(gets(a)) //在while中输入字符串不用加“!=EOF” 11 { 12 top=0; 13 base=0; 14 len=strlen(a); 15 for(i=0;i<len;i++) 16 { 17 if(a[i]=='('||a[i]=='['||a[i]=='{') 18 date[top++]=a[i]; //左括号入栈 19 else if((a[i]==')'||a[i]==']'||a[i]=='}')) 20 { 21 if(top==base) 22 break; //只有右括号,括号不匹配,结束查找 23 else 24 { 25 if((date[top-1]=='('&&a[i]==')')||(date[top-1]=='['&&a[i]==']')||(date[top-1]=='{'&&a[i]=='}')) 26 date[--top]; //右括号与左括号匹配,左括号出栈 27 else 28 break; //没有与右括号匹配的左括号,括号不匹配,结束查找 29 } 30 } 31 } 32 if(top==0&&i==len) 33 printf("yes "); //栈为空且字符串查找完成 34 else 35 printf("no "); 36 } 37 return 0; 38 }