|
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 22
|
||||||
Баланс скобок24.04.2009, 19:44. Показов 3861. Ответов 14
Метки нет (Все метки)
Добавьте плиз условие чтоб )(-говорило что не баланс..я прост незнаю
0
|
||||||
| 24.04.2009, 19:44 | |
|
Ответы с готовыми решениями:
14
Баланс скобок Баланс скобок Баланс скобок |
|
|
|
| 24.04.2009, 20:03 | |
|
У тебя подход к задаче неправильный. Ты прочитал все левые и правые скобки и напихал их в стек, а потом их все оттуда достал. Т.е непонятно вообще зачем тут стек (мог бы и в обычный буффер поместить)
Правильный подход такой: в первом же цикле, где ты считываешь из файла: 1. При чтении левой скобки суёшь её в стек 2. При чтении правой скобки: - если стек пуст, значит ошибка - лишняя (несбаллансированная) правая скобка - достаёшь значение из стека (что там можно не смотреть, потому что суёшь ты только левые скобки). 3. По окнчании цикла проверяешь стек, если стек не пустой, значит присуствуют лишние (несбаллансированные) левые скобки Это в том случае, если тебе поставлена задача обязательно стек использовать. Если стек не нужно, то просто используй счётчик. Для левой скобки увеличивай, для правой уменьшай. Если счётчик стал отрицательным - лишняя правая скобка. Если по окончании счётчик не равен нулю - значит есть лишние левые скобки
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 22
|
|
| 24.04.2009, 20:30 [ТС] | |
|
С обычым буфером все понятно прост как сделать именно для )(-что это не баланс если без стека?
0
|
|
|
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
|
|
| 24.04.2009, 20:36 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 22
|
|
| 24.04.2009, 20:37 [ТС] | |
|
так и говорю...)(-это при таком подходе будет говорить что баланс ведь есть и открывающая и закрывающая скобка..
0
|
|
|
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
|
|
| 24.04.2009, 20:40 | |
внимательно читаем ,что Evg написал
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 22
|
||||||
| 24.04.2009, 23:41 [ТС] | ||||||
0
|
||||||
|
|
|
| 24.04.2009, 23:42 | |
|
Неправильно
У тебя в первом цикле суются в стек только левые скобки, затем у тебя идёт второй цикл, гле суются правые скобки (но цикл этот ни разу не исполнится, т.к. мы уже дошли до конца файла) То, что я тебе писал выше, нужно делать в одном цикле
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 22
|
|
| 24.04.2009, 23:47 [ТС] | |
|
я тут опять немного переправил посмотри выше?не так ли?
0
|
|
|
|
|
| 24.04.2009, 23:51 | |
|
Ты написал второй вариант - во втором if'е, где else if(c == ')') надо делать pop
Т.е. при достижении левый скобки засовываем в стек (push), а при достижении правой скобки высовываем из стека (pop) то, что там лежит (зотя что там лежит, нам не важно) Давай просто попробуем смоделировать стек звёздочками У тебя выражение "((())())" Начало: стек пустой 1-й символ = '(' - push, стек стал такой: * 2-й символ = '(' - push, стек стал такой: ** 3-й символ = '(' - push, стек стал такой: *** 4-й символ = ')' - pop, стек стал такой: ** 5-й символ = ')' - pop, стек стал такой: * 6-й символ = '(' - push, стек стал такой: ** 7-й символ = ')' - pop, стек стал такой: * 8-й символ = ')' - pop, стек стал пустой При этом неважно, что пихать в стек, я пихал туда звёздочки. Нам важно лишь состояние стека (грубо говоря, количество элементов) Теперь неправильное выражение с избытком правых скобок: (())) Начало: стек пустой 1-й символ = '(' - push, стек стал такой: * 2-й символ = '(' - push, стек стал такой: ** 3-й символ = ')' - pop, стек стал такой: * 4-й символ = ')' - pop, стек стал пустой 5-й символ = ')' - pop, но стек уже пустой, а потому pop сделать не можем - ошибка (избыток правх скобок) Теперь неправильное выражение с избытком левых скобок: ((()) Начало: стек пустой 1-й символ = '(' - push, стек стал такой: * 2-й символ = '(' - push, стек стал такой: ** 3-й символ = '(' - push, стек стал такой: *** 4-й символ = ')' - pop, стек стал такой: ** 5-й символ = ')' - pop, стек стал такой: * Сиволы кончились, но стек у нас не пустой -ошибка (избыток левых скобок)
0
|
|
|
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 22
|
|
| 24.04.2009, 23:57 [ТС] | |
|
хм...а что если вставить в мою... изначальную прогу самую первую в цикл
if(br2>br1) printf("\nError");?может так легче будет?)
0
|
|
|
|
||
| 25.04.2009, 00:02 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 22
|
|
| 25.04.2009, 00:22 [ТС] | |
|
Читаешь в цикле из файла (т.е. while((c = getc(fp)) != EOF ...) но при этом дулаешь то, что у тебя записано во втором цикле (подсчёт br1 и br2)
а можно это по подробнее объяснить?)кстати спасибо что на меня время тратишь..)
0
|
|
|
|
|||
| 25.04.2009, 00:29 | |||
|
Я предлагаю сделать так. Делаешь только один цикл, в котором читаешь все байты и если этот байт - левая скобка, то делаешь подсчёт левых скобок, если правая - подсчёт правых (т.е. то, что ты делаешь во втором цикле). При этом стек тебе не нужен вообще
0
|
|||
|
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
|
||||||
| 25.04.2009, 13:32 | ||||||
|
Подправил.
0
|
||||||
| 25.04.2009, 13:32 | |
|
Помогаю со студенческими работами здесь
15
Баланс скобок
Баланс круглых скобок Баланс скобок в файле Проверять строку на баланс скобок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|