题目:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=614
说明:感觉被坑了,这么简单的题做了一个多小时...注意数据(()
#include<stdio.h>
#include<iostream>
#include<stack>
#include<string>
#include<string.h>
using namespace std;
int main(){
int n;
char s[2200];
while(scanf("%d%*c",&n)!=EOF){
while(n--){
gets(s);//这里要用gets 如果用scanf(%s)会wrong
if(s[0]=='\0') {cout << "Yes\n";continue;}
int flag=1;
stack<char> sta;
for(int i=0;i<strlen(s);i++){
if(s[i]=='(' || s[i]=='[') sta.push(s[i]);
else{
if(sta.empty()) {flag=0;break;}
if(s[i]==')'&&sta.top()=='(' || s[i]==']'&&sta.top()=='[')
sta.pop();
else {flag=0;break;}
}
}
if(!flag || !sta.empty())
cout << "No\n";
else
cout << "Yes\n";
}
}
return 0;
}