题目描述
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入
输入数据有多组,处理到文件结束。
输出
如果匹配就输出“yes”,不匹配输出“no”
示例输入
sin(20+10) {[}]
示例输出
yes no
提示
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<stdio.h> 2 #define maxsize 51 3 struct stack 4 { 5 char a[maxsize] ; 6 int top ; 7 }s ; 8 int match(char c1, char c2) 9 { 10 if((c1=='{'&&c2=='}')||(c1=='('&&c2==')')||(c1=='['&&c2==']')) 11 return 1 ; 12 else 13 return 0 ; 14 } 15 int m(char *str) 16 { 17 int i ; 18 char c ; 19 s.top = -1 ; 20 for(i=0; str[i]!=0; i++) 21 { 22 switch(str[i]) 23 { 24 case'(': 25 case'[': 26 case'{': s.top++; 27 s.a[s.top] = str[i] ; 28 break ; 29 case')': 30 case']': 31 case'}': c = s.a[s.top] ; 32 if(match(c, str[i])) 33 s.top-- ; 34 else 35 return 0 ; 36 37 } 38 } 39 if(s.top==-1) 40 return 1; 41 else return 0 ; 42 } 43 int main() 44 { 45 int i ; 46 char str[51] ; 47 while(gets(str)!=NULL) 48 { 49 i = m(str) ; 50 if(i!=0) 51 printf("yes\n") ; 52 else printf("no\n") ; 53 } 54 return 0 ; 55 }