Скобки
В строке могут содержатся круглые, квадратные и фигурные скобки - как открываюющие, так и закрывающие. Проверить баланс скобок в заданной строке. Считать, что он соблюдается, если выполнены следующие условия:
- каждой открывающей скобке найдется справа скобка закрывающая, и наоборот;
- соответствующие пары скобок разных типов правильно вложены друг в друга.
Во входном потоке задана единственная строка, содержащая круглые, квадратные и фигурные скобки. Длина строки не превышает 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";
}
Другие языки программирования и технологии
Помогите пожалуйста подобрать тест на которых моя программа заваливается... C++
Вроде всё правильно работает! Вот только несколько подкорректировал код, иначе пробел в строке мог привести к ошибке
#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");
}
#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");
}
Как вариант рассмотреть вот такой код:
https://pastebin.com/j10KxVcp
https://pastebin.com/j10KxVcp
Похожие вопросы
- ПОМОГИТЕ ПОЖАЛУЙСТА, КТО ЗНАЕТ ИНФОРМАТИКУ. НУЖНО НАПИСАТЬ ПРОГРАММУ НА С++.
- Помогите пожалуйста пройти тест огромное спасибо кто поможет
- Помогите, пожалуйста! Куда-то девается свободное место с диска C. Подскажите, что с ним еще можно сделать?
- Помогите пожалуйста сделать ТЕСТ в ВОRLАND DЕLРHI.
- Помогите, пожалуйста, понять и исправить, что в программе не так, язык Си
- помогите пожалуйста проверить код на языке си, программа работает неверно - не выдает сумму массива Z
- Помогите пожалуйста! нужно написать программу на C++
- Народ, помогите пожалуйста с программой в C#
- Можете пожалуйста помочь с программой на C++.
- Программа на C++ в Windows Form
https://rextester.com/YWKHU74133
https://rextester.com/HMER77239 - вот эта ссылка на код. Можно посмотреть для наглядности на него же на pastebin в моем ответе. Интересно чисто проффесиональное мнение.