数据结构实验之栈四:括号匹配
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Example Input
sin(20+10){[}]
Example Output
yesno
Hint
Author
ma61741N:
#include <bits/stdc++.h>using namespace std;int main(){ char s[111]; char stac[111]; int top=0,k,t=0,i; while(gets(s))//字符串输入gets以回车结束,scanf以空格和回车结束 { k=strlen(s); top=0; t=0; for(i=0; i<k; i++) { if(s[i]=='('||s[i]=='['||s[i]=='{') stac[++top]=s[i]; else if(s[i]==')'||s[i]==']'||s[i]=='}') { char a=stac[top]; if((a=='('&&s[i]==')')||(a=='['&&s[i]==']')||(a=='{'&&s[i]=='}')) { top--; } else { t=1; } } if(t==1) break; } if(top==0&&t==0&&i==k) { cout<<"yes"; } else { cout<<"no"; } cout<<endl; } return 0;}
2N:
#include <bits/stdc++.h>using namespace std;int top=0,n,i,j;int main(){ char str[55],stacks[55]; while(gets(str)!=NULL) { int t=1; n=strlen(str); top=0; for(i=0; i<n&&t==1; i++) { if(str[i]=='('||str[i]=='['||str[i]=='{') { stacks[top++]=str[i]; } else if(str[i]==')') { if(top!=0) {for(j=top-1; j>=0; j--) { if(stacks[j]=='(') { break; } if(stacks[j]=='['||stacks[j]=='{') { t=0; break; } } if(t==1) { while(top!=j) { top--; } } } else { t=0; } } else if(str[i]==']') { if(top!=0) {for(j=top-1; j>=0; j--) { if(stacks[j]=='[') { break; } if(stacks[j]=='('||stacks[j]=='{') { t=0; break; } } if(t==1) { while(top!=j) { top--; } } } else { t=0; } } else if(str[i]=='}') { if(top!=0) {for(j=top-1; j>=0; j--) { if(stacks[j]=='{') { break; } if(stacks[j]=='['||stacks[j]=='(') { t=0; break; } } if(t==1) { while(top!=j) { top--; } } } else { t=0; } } } if(top!=0) { t=0; } if(t==1) { cout<<"yes"; } else {cout<<"no";} cout<<endl; } return 0;}