Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/76: Рейтинг темы: голосов - 76, средняя оценка - 4.99
11 / 11 / 5
Регистрация: 25.11.2011
Сообщений: 147

Проверка на расстановку скобок

09.09.2013, 15:06. Показов 15412. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем задание такое.
Программа (консольная) проверяет каждую строку файла для проверки на расстановку скобок 4 типов ("(" и ")", "[" и "]", "{" и "}", "<" и ">"), проверка должна учесть парность и вложенность расстановки скобок (как в математических выражениях), другие символы - пропускать без обработки.
По результатам проверки формируется файл результатов, каждая строка которого соответствует строке файла для проверки, результат в строке может быть описан как - "нет ошибок", "ошибка в символе N" (N - порядковый номер символа в строке).

Подскажите как лучше это организовать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2013, 15:06
Ответы с готовыми решениями:

Проверка строки на правильную расстановку скобок
Прошу о помощи. Дали вот такое задание в универе. А ничего такого не объясняли. Как и что тут реализовать. Хотя бы какие-то подсказки...

Проверка расстановки скобок
Проверить правильность расстановки скобок, используя класс стек. Программа работает не во всех случаях. Например, если вводить { ( } ...

Проверка баланса скобок
Как задать условие в проверке баланса скобок, что если скобки окажутся НЕ пустыми, тое сть внутри них еще что-то будет (символы или ...

12
26 / 26 / 0
Регистрация: 10.03.2010
Сообщений: 248
09.09.2013, 15:13
в цикле ищем скобку begin если находим то с следующей позиции ищем скобку end, если нет скобки end то error
0
11 / 11 / 5
Регистрация: 25.11.2011
Сообщений: 147
09.09.2013, 15:27  [ТС]
Цитата Сообщение от eXtream Посмотреть сообщение
в цикле ищем скобку begin если находим то с следующей позиции ищем скобку end, если нет скобки end то error
Все сложней.
Пример: ( [ { < > } ] ) результат - true
а ( [ < { ] > } ) результат - false.
Пример: ((( )( ))( )), результат – true;
)(((())), результат – false.
Пример: {}[]()(()[]) результат – true;
Пример: (}{), результат – false.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.09.2013, 15:31
Работа со стеком (проверить правильность расстановки скобок)
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
09.09.2013, 15:34
Цитата Сообщение от saserlend Посмотреть сообщение
Все сложней
Берется четыре стека - каждый на свой вид скобочек. Парсер разбирает строку следующим образом:
- встретилась открывающая скобочка - записать ее в соответствующий стек.
- встретилась закрывающая скобочка - проверить есть ли в соответствующем стеке предыдущая открывающая скобочка. Если есть, то вычесть одну. Если нет, то ошибка разбора.
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
09.09.2013, 15:58
Хм, пожалуй, нет. Стек должен быть один. Иначе с четырьмя стеками возможна ситуация:
([)] - считается, что расстановка скобок правильная, а это не так.
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
09.09.2013, 16:01
Цитата Сообщение от CheshireCat Посмотреть сообщение
([)] - считается, что расстановка скобок правильная, а это не так.
каким образом, если все 2 стека окажутся незакрытыми, и еще 2 с ошибкой закрытия
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
09.09.2013, 16:10
Нет. Вот смотри, если руководствоваться изложенными правилами:
Парсер разбирает строку следующим образом:
1) - встретилась открывающая скобочка - записать ее в соответствующий стек.
2) - встретилась закрывающая скобочка - проверить есть ли в соответствующем стеке предыдущая открывающая скобочка. Если есть, то вычесть одну. Если нет, то ошибка разбора.
У нас есть стеки s1, s2, s3, s4. Анализируем строку: ([)]
Берем первую скобку: ( - она открывающая. По п.1 помещаем ее в стек - например, s1.
Берем вторую скобку: [ - она тоже открывающая, помещаем ее в стек s2.
Итого: s1 содержит (, s2 содержит [, стеки s3 и s4 пока пусты.
Разбираем строку дальше: третья скобка ) - закрывающая. По правилу п.2 выбираем открывающую скобку из стека s1 - открывающая скобочка там как раз есть.
Разбираем следующую скобку: ] - закрывающая, поэтому выбираем открывающую скобочку из стека s2 - она там как раз есть.
Строка закончена.
Все стеки у нас пусты. Вывод: скобки расставлены правильно.

А на самом деле это не так!
1
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
09.09.2013, 16:15
значит используем 1 стек, и заносим тип скобки
0
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
04.09.2014, 12:25
А если усложнить задачу наличием разделителя ','. Между двумя ',' скобки должны быть растравлены правильно, а также количество открывающих и закрывающих равны. ',' нельзя поставить вне блока скобок. между открывающей или закрывающей блок скобки и ',' действует тоже правило на скобки, что на случай между двумя ','
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
04.09.2014, 12:34
Archi0,
А если усложнить задачу наличием разделителя ','
Зачем?
0
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
04.09.2014, 13:17
ну типа функции в строке. Неверно описал задачу, так как между двумя ',' может быть другая функция.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.09.2014, 14:20
Было же:
Формула, по которой можно вычислить время наступления Рагнарека
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.09.2014, 14:20
Помогаю со студенческими работами здесь

Проверка правильности расстановки скобок
Помогите, пожалуйста, в написании счетчика скобок. Только новичок в программирование. Что-то пытался сделать . Начало программы выглядит...

Проверка правильности расстоновки скобок
Дана страка. Проверить правильность расстановки скобок (в страке приутствуют только круглые скобки). Вот мой текст, программа не правильно...

Работа со строками в С++ проверка на согласованность скобок
В арифметическом выражении проверить согласованность скобок, правильность их расположения и выдать соответствующее сообщение. Если можно...

Проверка правильности расстановки скобок в строке
Проверка строки на правильность написания То есть (5-6)*(5-6) правильно )5-6(*(5-6) неправильно

Работа со строками на С++ проверка на согласованность скобок.
В арифметическом выражении проверить согласованность скобок, правильность их расположения и выдать соответствующее сообщение. Если можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru