Вопрос задан 28.06.2023 в 04:31. Предмет Информатика. Спрашивает Мартынова Василиса.

Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то

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

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Нурлыбекова Гульназ.

Ответ:

#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;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения данной задачи в 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, если не хватает закрывающей скобки.

0 0

Похожие вопросы

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

Последние заданные вопросы в категории Информатика

Задать вопрос