标签:
本来是当做水题来做的,后来发现这道题略坑。
首先输入的字符串可能是空串,所以我用了gets函数,紧接着就被scanf("%d", &n)后面的换行符坑掉了。
于是乎再加一句getchar()
1 #include <cstdio> 2 #include <stack> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 150; 7 char s[maxn]; 8 9 bool ok(const char& c1, const char& c2) 10 { 11 if(c1 == ‘(‘ && c2 == ‘)‘) return true; 12 if(c1 == ‘[‘ && c2 == ‘]‘) return true; 13 return false; 14 } 15 16 int main() 17 { 18 //freopen("in.txt", "r", stdin); 19 20 int n; 21 scanf("%d", &n); getchar(); 22 while(n--) 23 { 24 gets(s); 25 stack<char> S; 26 while(!S.empty()) S.pop(); 27 int l = strlen(s); 28 if(l % 2 != 0) 29 { 30 puts("No"); 31 continue; 32 } 33 bool flag = true; 34 for(int i = 0; i < l; ++i) 35 { 36 if(s[i] == ‘(‘ || s[i] == ‘[‘) S.push(s[i]); 37 else 38 { 39 if(S.empty()) { flag = false; break; } 40 else if(ok(S.top(), s[i])) S.pop(); 41 else { flag = false; break; } 42 } 43 } 44 if(!S.empty()) flag = false; 45 printf("%s\n", flag ? "Yes" : "No"); 46 } 47 48 return 0; 49 }
UVa 673 (括号配对) Parentheses Balance
标签:
原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/4271346.html