![]() |
|
![]() ![]() ![]() |
|
BreakPointMAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: нет Всего: 24 |
Вообщем, если кто-нибудь что-то может посоветовать, как энто реализовать - буду премного благодарен... ))
Требуется написать класс (c++ -> Builder 6, если кому интересно... но это не суть важно), конструктор которого принимает шаблонную строку особого вида (формат которой описан ниже), и в котором имеется функция, принимающая некую строку и проверяющую ее на соответствие шаблону. Функция должна возвращать -1, если в переданной ей строке нет подстрок, отвечающих требованию шаблона, либо смещение, указывающее на начало подходящей подстроки. Формат шаблона следующий: \xHH - задает ASCII-код символа в 16-ричном виде; (\xHH-\xHH) - задает символ, ASCII-код которого находится в заданном диапазоне [] - задает список необязательных элементов {} - задает список обязательных элементов Т.е., если отвлечься от того, что символы задаются с помощью 16-ричных кодов в виде \xHH, где H- шестнадцатеричная цифра, и опустить задание диапазона ASCII-кодов символа, то шаблон может выглядеть примерно так: "[a]{b|cd}[ef{g|[h]i}]" и ему соответствуют строки: ab acd b cd abefg abefi abefhi acdefg acdefi acdefhi befg befi befhi cdefg cdefi cdefhi Как можно реализовать это дело? Через дерево? Тогда как его строить и как обходить? Через автоматы? А с чем это дело едят?.. .......... вариант "использовать готовую библиотеку для работы с рег.выр." не совсем подходит, хотя бы потому что интересно разобраться самому в том, как оно работает... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Циклы, Парсинг, поиск в тексте, куча условий. Вот и все!
Разбираешь все группы элементов, потом сравниваешь с входными -------------------- Всем добра ![]() |
|||
|
||||
BreakPointMAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: нет Всего: 24 |
Ну-ну... а как прикажешь быть со вложенностью скобок? Причем возможно многократной? Да если скобок здесь два вида - для задания просто перечисления и для задания необязательных элементов?
А как быть с шаблонами вида: "[a]{a|b|c}"? Строка "a" здесь подходит, верно? А как реализовать проверку, чтобы она на таком тесте не завалилась? -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
BreakPointMAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: нет Всего: 24 |
Спасибо, очень интересный ресурс! ![]() -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |