题目大意:给定包含只()[]的字符串,
判断括号是否匹配
解题思路:括号匹配用栈来实现
遇到'('或'['入栈
遇到’)'或‘]' 则判断与栈顶元素是否匹配
注意事项:栈要清空
空串也是匹配的,而cin和scanf,不读空行要用gets
遇到’)'或‘]' 时,判断 是否与栈顶元素匹配前提是栈不空
最后时 栈空 不一定匹配 要加一个匹配标记
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
int main()
{
stack <char> q;
char s[150];
int n;
cin>>n;
gets(s);
while(n--)
{
while(!q.empty())
q.pop();
bool ph=true;
gets(s);
if(strcmp(s,"")==0)
ph=true;
else
{
int l=strlen(s);
for(int i=0;i<l;++i)
{
if(s[i]=='['||s[i]=='(')
q.push(s[i]);
else if(s[i]==')'&&!q.empty()&&q.top()=='(')
{
q.pop();
}
else if(s[i]==']'&&!q.empty()&&q.top()=='[')
{
q.pop();
}
else
{
ph=false;
break;
}
}
}
if(ph&&q.empty())
printf("Yes\n");
else
printf("No\n");
}
return 0;
}