Другие языки программирования и технологии

Помогите пожалуйста подобрать тест на которых моя программа заваливается... C++

Скобки
В строке могут содержатся круглые, квадратные и фигурные скобки - как открываюющие, так и закрывающие. Проверить баланс скобок в заданной строке. Считать, что он соблюдается, если выполнены следующие условия:
- каждой открывающей скобке найдется справа скобка закрывающая, и наоборот;
- соответствующие пары скобок разных типов правильно вложены друг в друга.

Во входном потоке задана единственная строка, содержащая круглые, квадратные и фигурные скобки. Длина строки не превышает 255 символов.

Вывести слово YES, если имеется баланс скобок и NO - в противном случае

#include
#include

using namespace std;
int main()
{
int size, i, check = 0, check2 = 0, check3 = 0;
string str;
cin >> str;
size = str.size();
for(i = 0; i < size; i++)
{
if(str[i] == '(' || str[i] == ')')
{
if(str[i] == '(')
{
check++;
}
if(str[i] == ')')
{
check--;
}
if((i == 0 && str[i] == ')') || (i == size - 1 && str[i] == '('))
{
cout << "NO";
return 0;
}
if(check < 0)
{
cout << "NO";
return 0;
}
}

else if(str[i] == ']' || str[i] == '[')
{
if(str[i] == '[')
{
check2++;
}
if(str[i] == ']')
{
check2--;
}
if((i == 0 && str[i] == ']') || (i == size - 1 && str[i] == '['))
{
cout << "NO";
return 0;
}
if(check2 < 0)
{
cout << "NO";
return 0;
}
}

else if(str[i] == '}' || str[i] == '{')
{
if(str[i] == '{')
{
check3++;
}
if(str[i] == '}')
{
check3--;
}
if((i == 0 && str[i] == '}') || (i == size - 1 && str[i] == '{'))
{
cout << "NO";
return 0;
}
if(check3 < 0)
{
cout << "NO";
return 0;
}
}
if(str[i] == '(' && (str[i+1] == '}' || str[i+1] == ']'))
{
cout << "NO";
return 0;
}
else if(str[i] == '[' && (str[i+1] == '}' || str[i+1] == ')'))
{
cout << "NO";
return 0;
}
else if(str[i] == '{' && (str[i+1] == ']' || str[i+1] == ')'))
{
cout << "NO";
return 0;
}
}
if((check != 0) || (check2 != 0) || (check3 != 0))
{
cout << "NO";
return 0;
}
cout << "YES";
}
Вроде всё правильно работает! Вот только несколько подкорректировал код, иначе пробел в строке мог привести к ошибке

#include <iostream>
#include <string>
using namespace std;
int main() {
int check = 0, check2 = 0, check3 = 0;
bool flag = true;
string str;
getline(cin, str);
auto length = str.length();
for (auto i = 0U; i < length; i++) {
if (str[i] == '(' || str[i] == ')') {
if (str[i] == '(') check++;
if (str[i] == ')') check--;
if ((i == 0 && str[i] == ')') || (i == length - 1 && str[i] == '(')) {
flag = false;
break;
} if (check < 0) {
flag = false;
break;
}
}
else if (str[i] == ']' || str[i] == '[') {
if (str[i] == '[') check2++;
if (str[i] == ']') check2--;
if ((i == 0 && str[i] == ']') || (i == length - 1 && str[i] == '[')) {
flag = false;
break;
} if (check2 < 0) {
flag = false;
break;
}
} else if (str[i] == '}' || str[i] == '{') {
if (str[i] == '{') check3++;
if (str[i] == '}') check3--;
if ((i == 0 && str[i] == '}') || (i == length - 1 && str[i] == '{')) {
flag = false;
break;
}
if (check3 < 0) {
flag = false;
break;
}
}
if (str[i] == '(' && (str[i + 1] == '}' || str[i + 1] == ']')) {
flag = false;
break;
} else if (str[i] == '[' && (str[i + 1] == '}' || str[i + 1] == ')')) {
flag = false;
break;
} else if (str[i] == '{' && (str[i + 1] == ']' || str[i + 1] == ')')) {
flag = false;
break;
}
}
if ((check != 0) || (check2 != 0) || (check3 != 0)) flag = false;
if (flag) cout << "YES";
else cout << "NO";
cout.put('\n');
cin.get();
system("pause");
}
..
..abdallah ..
83 015
Лучший ответ
..abdallah .. ({123} {456}) пробел в строке и у вас ошибка
Павел Зонов А что если такой вариант?
https://rextester.com/YWKHU74133
Павел Зонов Не ту ссылку скопировало
https://rextester.com/HMER77239 - вот эта ссылка на код. Можно посмотреть для наглядности на него же на pastebin в моем ответе. Интересно чисто проффесиональное мнение.
Как вариант рассмотреть вот такой код:
https://pastebin.com/j10KxVcp
BA
Baron A.k.a Sensey._.
15 408