![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Тёмный Эльф |
![]() ![]()
Сообщение
#1
|
![]() Влюблённый псих ![]() ![]() ![]() Группа: Пользователи Сообщений: 185 Пол: Женский Реальное имя: Лейла Репутация: ![]() ![]() ![]() |
Хочу написать прогу, которая разбирает выражения со скобками, например, если
(6[0)888]{99} значит, прога выводит (6[0) [0)888] {99} возникла проблема с алгоритмом. Предположим, выражение представлено ввиде строки. Тогда я ищу первую открывающуюся скобку с начала строки, а затем соответствующую ей закрывающуюся скобку с конца строки и вывожу все ,что между ними, затем ищу вторую открывающуюся скобку ит.д. НО если я введу такое выражение [6(7]8[9]), то если действовать по этому алгоритму выведется совсем не то, что надо, а именно, [6(7]8[9] (7]8[9]) [9] а ведь должно быть [6(7] (7]8[9]) [9] Подскажите, как быть в такой ситуации? Сообщение отредактировано: Тёмный Эльф - 19.04.2007 23:43 |
![]() ![]() |
Michael_Rybak |
![]()
Сообщение
#2
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
В таком случае посмотри обратную польскую запись.
|
Тёмный Эльф |
![]() ![]()
Сообщение
#3
|
![]() Влюблённый псих ![]() ![]() ![]() Группа: Пользователи Сообщений: 185 Пол: Женский Реальное имя: Лейла Репутация: ![]() ![]() ![]() |
Пожалуйста помогите разобраться с прогой, всё не могу довести её до ума.
Сейчас она корректно вроде разбирается с выражением, где каждый вид скобок ('(', '[', '{', '<') встречается лишь однажды. Например, если вводим (ma)[pa]<da>, то выводится (ma) [pa] <da> а если вводим (ma[pa]da)<ya> , то программа выдаст (ma[pa]da) [pa] <ya> То есть найдя с начала строки скобку, ищем такую же с конца. Потом запоминаем место ,где нашли первую скобку, идем в рекурсию, и так до конца строки. Но например если вводим (ma)(ma)[pa], то уже возникают проблемы, надо (ma) (ma) [pa], а прога естественно выводит (ma)(ma) [pa], потому что ищет такую же скобку с конца! Нет, можно было бы конечно, искатбь закрывающуюся скобку с начала строки, но тогда еси мы введем такое выражение (ma)(ma){pa{pa}da} получится (ma) (ma) {pa{pa} {pa} неправильно же! надо (ma) (ma) {pa{pa}da} {pa} В-общем, я совсем запуталась..есть ли у кого-нибудь идеи?
|
Malice |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
То есть найдя с начала строки скобку, ищем такую же с конца А надо не с конца искать, а продолжать от скобки вперед. т.е. нашел скобку "(", идешь вперед и ищещь соответствующую закрывающую (Заводишь счетчик, к нему +1, если попадалась открывающая, -1 -закрывающая - на нужной закрывающей счетчик будет = 0). |
Тёмный Эльф |
![]()
Сообщение
#5
|
![]() Влюблённый псих ![]() ![]() ![]() Группа: Пользователи Сообщений: 185 Пол: Женский Реальное имя: Лейла Репутация: ![]() ![]() ![]() |
Цитата А надо не с конца искать, а продолжать от скобки вперед. т.е. нашел скобку "(", идешь вперед и ищещь соответствующую закрывающую но если мы будем продолжать от скобки вперед ,то например, такое выражение (ma(da)ma) прога выведет как (ma(da) (da)ma), а надо: (ma(da)ma) (da) или все дело в счетчике? я не совсем поняла его роль , можно пожалуйста поподробнее? |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 12:53 |