Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
saserlend
11 / 11 / 1
Регистрация: 25.11.2011
Сообщений: 145
#1

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

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

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

Подскажите как лучше это организовать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2013, 15:06     Проверка на расстановку скобок
Посмотрите здесь:

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

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

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

Проверка числа открывающихся и закрывающихся скобок - C++
Нужно написать функцию, которая проверяет правильность расположения скобок в строке. Если открывающимся скобкам соответствует столько-же...

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

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

Проверка правильности расстановки скобок в строке (рекурсия) - C++
Помогите написать рекурсивную функцию, проверяющую правильность расстановки скобок в строке. Правильные скобочные структуры: () ({}) ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eXtream
24 / 24 / 0
Регистрация: 10.03.2010
Сообщений: 161
09.09.2013, 15:13     Проверка на расстановку скобок #2
в цикле ищем скобку begin если находим то с следующей позиции ищем скобку end, если нет скобки end то error
saserlend
11 / 11 / 1
Регистрация: 25.11.2011
Сообщений: 145
09.09.2013, 15:27  [ТС]     Проверка на расстановку скобок #3
Цитата Сообщение от eXtream Посмотреть сообщение
в цикле ищем скобку begin если находим то с следующей позиции ищем скобку end, если нет скобки end то error
Все сложней.
Пример: ( [ { < > } ] ) результат - true
а ( [ < { ] > } ) результат - false.
Пример: ((( )( ))( )), результат – true;
)(((())), результат – false.
Пример: {}[]()(()[]) результат – true;
Пример: (}{), результат – false.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.09.2013, 15:31     Проверка на расстановку скобок #4
Работа со стеком (Необходимо проверить,правильно ли расставлены скобки)
SatanaXIII
Супер-модератор
Эксперт С++
5591 / 2625 / 239
Регистрация: 01.11.2011
Сообщений: 6,455
Завершенные тесты: 1
09.09.2013, 15:34     Проверка на расстановку скобок #5
Цитата Сообщение от saserlend Посмотреть сообщение
Все сложней
Берется четыре стека - каждый на свой вид скобочек. Парсер разбирает строку следующим образом:
- встретилась открывающая скобочка - записать ее в соответствующий стек.
- встретилась закрывающая скобочка - проверить есть ли в соответствующем стеке предыдущая открывающая скобочка. Если есть, то вычесть одну. Если нет, то ошибка разбора.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
09.09.2013, 15:58     Проверка на расстановку скобок #6
Хм, пожалуй, нет. Стек должен быть один. Иначе с четырьмя стеками возможна ситуация:
([)] - считается, что расстановка скобок правильная, а это не так.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
09.09.2013, 16:01     Проверка на расстановку скобок #7
Цитата Сообщение от CheshireCat Посмотреть сообщение
([)] - считается, что расстановка скобок правильная, а это не так.
каким образом, если все 2 стека окажутся незакрытыми, и еще 2 с ошибкой закрытия
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
09.09.2013, 16:10     Проверка на расстановку скобок #8
Нет. Вот смотри, если руководствоваться изложенными правилами:
Парсер разбирает строку следующим образом:
1) - встретилась открывающая скобочка - записать ее в соответствующий стек.
2) - встретилась закрывающая скобочка - проверить есть ли в соответствующем стеке предыдущая открывающая скобочка. Если есть, то вычесть одну. Если нет, то ошибка разбора.
У нас есть стеки s1, s2, s3, s4. Анализируем строку: ([)]
Берем первую скобку: ( - она открывающая. По п.1 помещаем ее в стек - например, s1.
Берем вторую скобку: [ - она тоже открывающая, помещаем ее в стек s2.
Итого: s1 содержит (, s2 содержит [, стеки s3 и s4 пока пусты.
Разбираем строку дальше: третья скобка ) - закрывающая. По правилу п.2 выбираем открывающую скобку из стека s1 - открывающая скобочка там как раз есть.
Разбираем следующую скобку: ] - закрывающая, поэтому выбираем открывающую скобочку из стека s2 - она там как раз есть.
Строка закончена.
Все стеки у нас пусты. Вывод: скобки расставлены правильно.

А на самом деле это не так!
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
09.09.2013, 16:15     Проверка на расстановку скобок #9
значит используем 1 стек, и заносим тип скобки
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 167
04.09.2014, 12:25     Проверка на расстановку скобок #10
А если усложнить задачу наличием разделителя ','. Между двумя ',' скобки должны быть растравлены правильно, а также количество открывающих и закрывающих равны. ',' нельзя поставить вне блока скобок. между открывающей или закрывающей блок скобки и ',' действует тоже правило на скобки, что на случай между двумя ','
Boleon
Guardian of Asgaard
372 / 315 / 106
Регистрация: 11.11.2013
Сообщений: 1,046
Завершенные тесты: 1
04.09.2014, 12:34     Проверка на расстановку скобок #11
Archi0,
А если усложнить задачу наличием разделителя ','
Зачем?
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 167
04.09.2014, 13:17     Проверка на расстановку скобок #12
ну типа функции в строке. Неверно описал задачу, так как между двумя ',' может быть другая функция.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2014, 14:20     Проверка на расстановку скобок
Еще ссылки по теме:

Проверка баланса скобок арифметического выражения, введенного с клавиатуры - C++
Составить программу проверки баланса скобок арифметического выражения , введенного с клавиатуры.

Рекурсия (проверка на предмет соответствия закрывающих и открывающих скобок) - C++
Пусть в алгебраической записи выражения имеется всего одна операция, умножение, обозначаемое обычным образом ( 2 сомножителя следуют...

Проверка записи на соответствие условию: правильная скобочная запись из круглых и квадратных скобок - C++
Здравствуйте! Задача: проверка записи на соответствие условию: правильная скобочная запись из круглых и квадратных скобок, внутри...

Найти расстановку двенадцати коней на шахматной доске - C++
Найти расстановку двенадцати коней на шахматной доске, при которой каждое поле будет находиться под ударом одного из них. Написать функцию...

Два конвейера разливают и закупоривают бутылки. Определить оптимальную расстановку бутылок. - C++
Помогите с задачей.В цеху по производству напитков работают два конвеера.На первом конвеере напиток разливается в бутылки, а во втором...


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

Или воспользуйтесь поиском по форуму:
gru74ik
Модератор
Эксперт CЭксперт С++
3977 / 1724 / 193
Регистрация: 20.02.2013
Сообщений: 4,824
Записей в блоге: 21
04.09.2014, 14:20     Проверка на расстановку скобок #13
Было же:
Формула, по которой можно вычислить время наступления Рагнарека
Yandex
Объявления
04.09.2014, 14:20     Проверка на расстановку скобок
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru