Две вещи:
- Не смешивайте getline и operator >>. Либо сделайте это:
int main()
{
int t;
cin >> t;
cin.ignore();
for (int t_itr = 0; t_itr < t; t_itr++) {
string s;
getline(cin, s);
string result = isBalanced(s);
cout << result << "\n";
}
return 0;
}
или сделайте это:
int main()
{
int t;
cin >> t;
for (int t_itr = 0; t_itr < t; t_itr++) {
string s;
cin >> s;
string result = isBalanced(s);
cout << result << "\n";
}
return 0;
}
, в зависимости от того, что подходит вашему делу.
Ваша логика c несовершенна. Вот исправленная реализация
isBalanced()
:
string isBalanced(string s) {
int size=s.length();
stack<char>bracket;
char open[3]={'{','[','('};
if(size%2!=0)
return "NO";
for(int i=0;i<size;i++){
cout << i << endl;
if(find(s[i],open)){
bracket.push(s[i]);
}
else{
if(bracket.empty())
return "NO";
else
{
switch (bracket.top()) {
case '{':
if('}'!=s[i])
return "NO";
break;
case '(':
if(')'!=s[i])
return "NO";
break;
case '[':
if(']'!=s[i])
return "NO";
break;
}
bracket.pop();
}
}
}
return bracket.empty() ? "YES" : "NO";
}
Совет: пожалуйста, всегда делайте правильные отступы.