![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Вообщем, если кто-нибудь что-то может посоветовать, как энто реализовать - буду премного благодарен... ))
Требуется написать класс, конструктор которого принимает шаблонную строку особого вида (формат которой описан ниже), и в котором имеется функция, принимающая некую строку и проверяющую ее на соответствие шаблону. Функция должна возвращать -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 Есть смутное предположение, что тут не обойтись без дерева, но какого именно, как его строить и как обходить - это вопрос. ps: воспользоваться регулярными выражениями не предлать, здесь немного другая ситуация... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Быть может, кто-нибудь сталкивался с подобной задачей?
Насколько я понял, варианта здесь может быть два. 1-ый, достаточно простой, но не рациональный - построить дерево и потом проверку делать по нему. Вся фигня в том, что шаблон недетерминированный, в нем есть необязательные элементы, и дерево должно по два раза включать одни и те же элементы - сначала с необяхательными элементами, потом без них... распухнет оно до невообразимых размеров, да и работать это будет долго. 2-ой, правильный - через автоматы. Тут уже трабла, в автоматах я постольку поскольку... (( Если у кого-нибудь есть какие-то соображения, plz... )) Уже неделю голову ломаю. ps: достал пару исходников по регэкспам, но это death в них разбираться... указатель на указателе скачет, куча свитчей, циклов и рекурсий. И почти без комментариев... (( -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
http://forum.vingrad.ru/index.php?showtopic=37306&hl=маска
это, конечно, не решение именно этой проблемы, но думаю. может оказаться полезным... -------------------- qqq |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Да, спасибо, это интересно, ...хотя и не совсем то, что нужно.
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
У меня тоже похожая проблема... только формат шаблона немного другой...
Народ, может кто-нибудь что-нибудь посоветует????? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |