题目信息:括号匹配,规则如下:
1. 若字符串为空, 则正确.
(需要注意)
2. 若 A、B 皆正确, 则 AB 也正确.
3. 若 A 正确, 则 (A) 与 [A] 都正确.即要求括号与中括号都要匹配.
这道题 也是栈的简单应用,当遇到‘(’或‘ [ ’时,入栈,若遇到配对的括号,则出栈。和前面的括号配对问题大同小异,这道题就是多了一个条件,
若字符串为空,则正确。字符串为空,需要用到gets()读取字符串,因为scanf();不能识别空格。这里一定一定一定要注意。。。
源代码:
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int main()
{
char a[150];
int n,i,l;
scanf("%d",&n);
getchar(); //注意
while(n--)
{
stack<char>S;
gets(a); //注意
l=strlen(a);
if(a[0]=='\n') //注意
{
printf("Yes\n");
continue;
}
for(i=0;i<l;i++)
{
if(a[i]=='('||a[i]=='[')
S.push(a[i]);
else if(a[i]==')'||a[i]==']')
{
if(!S.empty())
{
if((a[i]==']'&&S.top()=='[')||(a[i]==')'&&S.top()=='('))
S.pop();
else
S.push(a[i]);
}
else
S.push(a[i]);
}
}
if(S.empty())
printf("Yes\n");
else
printf("No\n");
}
return 0;
}