问题描述
已知一串括号,请问他们是否匹配好了…… {} [] () 三种括号均可能出现。
输入第一行包含一个整数T,表示有T组测试数据。
以下每组测试数据格式: 每组测试数据包含一行,该行包含若干符号,每个符号均为{,},[,],(,)六个中的一个。
输出输出 如果括号匹配好,输出Yes,否则输出No。
输入样列2 ()[]{} ([)]
输出样例
Yes
No
#include<stdio.h>
#include<stack>
using namespace std;
int strMatch(char ch1,char ch2);
int match(char *str);
int main()
{
char str[100];
int ans,n;
scanf("%d",&n);
getchar();
while(n--){
gets(str);
ans=match(str);
if(ans==1){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}
int match(char *str)
{
stack < char > s;
for(int i=0;str[i]!='\0';i++){
if(str[i]=='[' || str[i]=='{' || str[i]=='('){
s.push(str[i]);
}
else if(strMatch(str[i],s.top())==1){
s.pop();
}
else{
return 0;
}
}
if(s.size()==0){
return 1;
}
else{
return 0;
}
}
int strMatch(char ch1,char ch2)
{
if(ch1=='}' && ch2=='{'){
//printf("%c%c\n",ch2,ch1);
return 1;
}
if(ch1==']' && ch2=='['){
//printf("%c%c\n",ch2,ch1);
return 1;
}
if(ch1==')' && ch2=='('){
//printf("%c%c\n",ch2,ch1);
return 1;
}
return 0;
}