数据结构实验之栈与队列四:括号匹配
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Sample Input
sin(20+10)
{[}]
Sample Output
yes
no
Hint
Source
ma6174
思路:
1:当出现(,{,【,直接存进数组
2:当),】,},出现时考虑和我们第一步存的数组是不是相对称
3:不对称直接break,
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[100]; char b[200]; int i, len; while(gets(a)) { len = strlen(a); int top = 0; memset(b,0,sizeof(b)); for(i = 0; i < len; i++) { if(a[i] == '(' || a[i] == '{' || a[i] == '[') { top++; b[top] = a[i]; } else if(a[i] == ')') { if(b[top] == '(') { top--; } else { break; } } else if(a[i] == ']') { if(b[top] == '[') { top--; } else { break; } } else if(a[i] == '}') { if(b[top] == '{') { top--; } else { break; } } } if(top == 0 && i == len) { printf("yes\n"); } else { printf("no\n"); } } return 0; }