
Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то
есть каждой открывающей соответствует одна закрывающая), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная закрывающая скобка, или, если закрывающих скобок не хватает, число –1. Нумерация позиций символов начинается с 1. с помощью c++

Ответы на вопрос

Ответ:
#include <iostream>
using namespace std;
int main() {
string str;
cin >> str;
int count = 0, last_open = 0;
char open = '(', closed = ')';
for (int i = 0; i < str.size() and count >= 0; ++i){
if (str[i] == open){
++count;
last_open = i + 1;
}
else if (str[i] == closed)
--count;
}
if (count < 0)
cout << -1;
else if (count > 0)
cout << last_open;
else
cout << 0;
return 0;
}



Для решения данной задачи в C++ вы можете использовать стек (stack) для отслеживания пар скобок. Вот пример реализации:
cpp#include <iostream>
#include <stack>
#include <string>
int findErrorPosition(const std::string& input) {
std::stack<int> stack;
for (int i = 0; i < input.length(); ++i) {
if (input[i] == '(') {
stack.push(i + 1); // Сохраняем позицию открывающей скобки
} else if (input[i] == ')') {
if (stack.empty()) {
return -(i + 1); // Не хватает открывающей скобки
} else {
stack.pop(); // Соответствует закрывающая скобка
}
}
}
if (stack.empty()) {
return 0; // Все скобки расставлены правильно
} else {
return stack.top(); // Найдена лишняя открывающая скобка
}
}
int main() {
std::string input;
std::cout << "Введите строку: ";
std::cin >> input;
int result = findErrorPosition(input);
if (result == 0) {
std::cout << "Скобки расставлены правильно." << std::endl;
} else if (result > 0) {
std::cout << "Первая ошибочная закрывающая скобка на позиции: " << result << std::endl;
} else {
std::cout << "Не хватает закрывающей скобки на позиции: " << -result << std::endl;
}
return 0;
}
Этот код сначала проверяет, правильно ли расставлены скобки, используя стек для отслеживания открывающих и закрывающих скобок. Если скобки расставлены правильно, он возвращает 0. В противном случае, он возвращает номер позиции первой ошибочной закрывающей скобки или -1, если не хватает закрывающей скобки.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili