为什么第一个测试用例会输出NO
```c++
#include<iostream>
using namespace std;
const int MAXSIZE=1000;
typedef struct{
char data[MAXSIZE];
int top;
int Size;
}SqStack;
void initStack(SqStack &s)
{
s.top=0;
s.Size=MAXSIZE;
}
bool stackEmpty(SqStack S)
{
if(S.top==0) return true;
else return false;
}
bool stackFull(SqStack s)
{
if(s.top==s.Size) return true;
else return false;
}
bool push(SqStack &s,char e)
{
if(stackFull(s)) return false;
s.data[s.top]=e;
s.top++;
return true;
}
bool pop(SqStack &s,char &e)
{
if(stackEmpty(s)) return false;
s.top--;
e=s.data[s.top];
}
int Counting(string str,int &a,int &b)
{
int i=0;
while(str[i]!='\0')
{
if(str[i]=='('||str[i]=='{'||str[i]=='[') a++;
else if(str[i]==']'||str[i]=='}'||str[i]==')') b++;
i++;
}
return true;
}
bool Matching(string str)
{
SqStack s;
initStack(s);
int flag=1;
int i=0;
while(flag==1&&str[i]!='\0')
{
char ch =str[i];
if(ch=='('||ch=='{'||ch=='[') {push(s,ch);}
else if(ch=='}'||ch==']'||ch==')'){
char e;
if(stackEmpty(s)) {flag =0;}
else {
pop(s,e);
if(ch=='}'&&e!='{'||ch==']'&&e!='['||ch==')'&&e!='(')
flag =0;
}
}
i++;
}
if(flag==1&&stackEmpty(s)) {return true;}
else return false;
}
int main()
{
string str;
int a=0;
int b=0;
getline(cin,str);
Counting(str,a,b);
cout<<a<<" "<<b<<endl;
Matching(str);
if(Matching(str)) cout<<"YES";
else cout <<"NO";
}
```