本来想找个水题涨涨自信呢,但是被折磨得不轻,题目的坑点在与连续输入,会导致回车符也会读入到字符串中 ,换行符也是个字符!!!!
要有针对的方法,可以看到代码里的两种方法,均可以将换行符读入,这样对字符串处理就可以了,如果不读入换行符,那么就会对下一次输入造成影响。
仔细看看代码吧~
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
char s[150];
//string s;
int main()
{
int T;
char str[100];
scanf("%d",&T);
fgets(str,100,stdin);
while(T--)
{
// getline(cin,s); //也可以读入换行
fgets(s,150,stdin);
int n=strlen(s);
bool error=false;
stack<char> st;
for(int i=0;i<n;i++)
{
if(s[i]=='(')
{
st.push(s[i]);
}
else if(s[i]=='[')
{
st.push(s[i]);
}
else if(s[i]==')')
{
if(st.empty()==1)
{
error=true;
break;
}
else
{
if(st.top()=='(')
st.pop();
else
{
error=true;
break;
}
}
}
else if(s[i]==']')
{
if(st.empty()==1)
{
error=true;
break;
}
else
{
if(st.top()=='[')
st.pop();
else
{
error=true;
break;
}
}
}
}
if(error==true||!st.empty())
printf("No\n");
else
printf("Yes\n");
}
return 0;
}