|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.07.2012, 12:32 | #1 |
Пользователь
Регистрация: 16.05.2012
Сообщений: 17
|
Проверить правильность расстановки круглых и квадратных скобок в выражениях
дана строка символов проверить правильность расстановки круглых и квадратных скобок в выражениях
|
04.07.2012, 12:47 | #2 |
Software Developer
Участник клуба
Регистрация: 01.03.2011
Сообщений: 1,098
|
И в чем проблема?
Заводишь два счетчика и считаешь посимвольно. Встречаешь открывающую скобку -- увеличиваешь счетчик, закрывающую уменьшаешь. В любой точке строки счетчик не может быть отрицательным. Еще надо условие на то, чтобы скобки не перекрывали друг друга -- вот так, к примеру: ( ( [ ) ] ) -- это неправильно. Ну, и в конце строки счетчики должны быть равны нулю.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв. Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062 |
05.07.2012, 09:42 | #3 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Эту задачу можно решить для любого вида скобок следующим образом:
Задаешь код скобок: { - 3 (плюс 3) [ - 2 (плюс 2) ( - 1 (плюс 1) ) - -1 (минус 1) ] - -2 (минус 2) } - -3 (минус 3) Формируешь стек, в который вкладываешь всякую открывающуюся скобку (>0). Если скобка закрывающаяся (<0), то проверяешь стек. Если пуст, то ошибка иначе извлекаешь из стека число. Складываешь извлеченное число с имеющимся. Если ноль, то все Ок иначе ошибка. Это стандартный алгоритм. Как то так ...
Как-то так, ...
|
05.07.2012, 10:31 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
VktorR, сдаётся мне, что алгоритм описанный в вашем случае НЕ РАБОТОСПОСОБЕН (по крайней мере напрямую, так, как Вы его описали!)
Кроме того, раз уж мы про стек заговорили, кто нам мешает сделать его (стек) символьным и пихать встреченные открывающие скобки в него, а вытаскивать (с проверкой) из стека, когда в строке встречаются закрывающиеся скобки... |
05.07.2012, 12:18 | #5 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Стек здесь излишняя бюрократия. Входящий поток символов уже можно рассматривать как стек, просто пропуская любые символы не являющиеся скобками. А если стек уже по сути есть, то зачем заводить еще один? Нафига два цикла когда можно воспользоваться одним?
Общую схему действий уже расписал Mandrivnyk - рабочая, я использовал подобную (только вместо квадратных скобок у меня были еще угловые < и >). Писал на c#, но алгоритм по сути тот же.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 05.07.2012 в 12:21. |
05.07.2012, 13:00 | #6 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
ViktorR
Задаешь код скобок: { - 3 (плюс 3) [ - 2 (плюс 2) ( - 1 (плюс 1) ) - -1 (минус 1) ] - -2 (минус 2) } - -3 (минус 3) {))) :LOL:
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
05.07.2012, 13:23 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
впрочем, по сути я с вами согласен. ещу одна дополнительная строчка быстро и удобно смоделирует стек (вот примерный набросок решения): Код:
|
|
05.07.2012, 14:23 | #8 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
Небольшая поправка по строчке
Код:
Код:
Или же в стек добавлять обратные скобки, т.е. вместо Код:
Код:
|
05.07.2012, 15:34 | #9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
eoln, я понял, о чём! Конечно же, когда мы встретили ЗАКРЫВАЮЩУЮ скобку, она НИКАК не будет равна открывающей!
это ошибка с моей стороны, эту мелочь надо учесть и исправить! могу предложить такой вариант обхода: Код:
Последний раз редактировалось Serge_Bliznykov; 05.07.2012 в 15:46. |
05.07.2012, 18:33 | #10 |
Пользователь
Регистрация: 16.05.2012
Сообщений: 17
|
напишите полностью правильный код пож
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа проверки правильности расстановки скобок | glushara | Помощь студентам | 2 | 23.04.2012 02:49 |
Проверка правильности расстановки круглых скобок. | torren108 | Помощь студентам | 7 | 11.12.2011 20:15 |
С++ Перегрузка квадратных скобок | Namolem | Помощь студентам | 1 | 29.04.2010 02:45 |
Проверить равенство числа открывающих и закрывающих круглых скобок | 010 | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 18.05.2008 00:27 |
проверить правильность расстановки операторов begin и end | Тёмка | Помощь студентам | 1 | 10.12.2007 13:07 |