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             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)