首页 > 代码库 > UVa 673 (括号配对) Parentheses Balance

UVa 673 (括号配对) Parentheses Balance

本来是当做水题来做的,后来发现这道题略坑。

首先输入的字符串可能是空串,所以我用了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             else38             {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