![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 04.04.2013
Сообщений: 77
|
![]()
Здраствуйте.
В строке записан текст что сбалансированный за круглыми скобками: <текст>::=<пусто>|<елемент><текст > <елемент>::=<буква>|(<текст>) Надо для каждой пары скобок открывающиеся и закрывающиеся напечатать номера их позиций в тексте, упорядочив пары номеров по возрастанию номеров позиций скобок видкриваються.Наприклад, для текста А + (45-F (X)*(B-C)) нужно напечатать 3 17;8 10;12 16. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 04.04.2013
Сообщений: 77
|
![]()
Что никто не может помочь?
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]()
На уровне концепции: завести список пар позиций, как глобальный объект. Функция подсчёта скобок принимает указатель на позицию в строке, идёт по строке, пока не найдёт закрывающую, открывающую скобку или конец строки.
Если находит закрывающую скобку - возвращает то, до какой позиции она дошла. Если находит открывающую скобку - запоминает её и вызывает сама себя начиная со следующего символа, принимает возвращённое значение, проверяет, что там закрывающая скобка и заносит эту пару скобок в список. Если находит конец строки - возвращает то, до какой позиции на дошла. После вызова этой функции с аргументом "начало строки", все пары скобок окажутся занесены в список, но в неправильном порядке. Следует упорядочить список (хотите - превратив в массив, хотите - так) по возрастанию "номеров позиций скобок видкриваються"... видимо, по первым элементам сохранённых в списке пар. |
![]() |
![]() |
![]() |
#4 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]()
нашел открывающую скобку - пихай в стек позицию.
нашел закрывающую скобку - вытаскивай из стека позицию открывающей скобки, приделывай к ней текущую позицию и ложь в список (в котором результат накапливать хочешь). Держи на прологе без сортировки: Код:
Цитата:
Цитата:
Последний раз редактировалось rrrFer; 17.05.2013 в 18:02. |
||
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]() Код:
std::sort поможет, наверное. ЗЫ. алгоритм тот же что и на прологе. Цитата:
---------- ЗЫ. некропост, но ТС попросил в личке |
|
![]() |
![]() |
![]() |
#7 | ||
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]() Цитата:
Код:
Цитата:
|
||
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
стеки | lena-tus | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 26.11.2013 21:37 |
С++ стеки | student12345 | Общие вопросы C/C++ | 0 | 10.12.2011 13:11 |
стеки | ordinary_smile | Общие вопросы C/C++ | 1 | 27.11.2011 19:34 |
Стеки | ильшат9 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 18.10.2011 18:43 |
Стеки... | Donim | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 13.06.2011 11:33 |