括号配对问题(一)

Description
现在有一种只包括左右小括号(“(”和“)”)和空格(” “)的字符串序列,请你判断括号是否匹配,如果匹配就输出Yes,不匹配输出No。

Input
输入数据第一行输入一个T(0≤T≤100),表示测试数据的组数。

接下来有T行测试数据,每行有一个符合题意的字符串,字符串长度不超过500。

Output
每组测试数据,先输出一个”Case %d:“,%d表示第几组测试数据。接着,如果字符串括号匹配,输出Yes,否则,输出No。具体输出格式参考下面输出样例。

Sample Input
2
( ())
)(
Sample Output
Case 1:Yes
Case 2:No

 1 #include<iostream>
 2 #include<stack>
 3 #include<stdio.h>
 4 #include<string.h>
 5 using namespace std;
 6 int main()
 7 {
 8     int t,len,i,j,flag;
 9     char x[601];
10     scanf("%d",&t);
11     getchar();
12     j=1;
13     while(t--)
14     {
15         gets(x);
16         len=strlen(x);
17         stack<char>s;
18         for(i=0; i<len; i++)
19         {
20                 if(x[i]=='(')
21                     s.push(x[i]);///压入栈
22                 if(x[i]==')')
23                 {
24                     if(s.empty())
25                     {
26                         break;
27                     }
28                      else
29                         s.pop();///出栈
30                 }
31         }
32         if(s.empty()&&i>=len)
33             printf("Case %d:Yes\n",j);
34         else
35             printf("Case %d:No\n",j);
36         j++;
37   
38     }
39     return 0;
40 }

 

  

posted @ 2018-03-28 23:06  王陸  阅读(1746)  评论(0编辑  收藏  举报