|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.01.2008, 00:26 | #1 |
Регистрация: 16.01.2008
Сообщений: 7
|
C++.Задачка непростая!
Попробывал 2-3 алгоритма поиска,и все забраковали...Помогите пожалуйста с написанием процедурой поиска или с написанием алгоритма.Есть два файла:текст и словарь,где несколько слов.
Например,дан текс:Вот,наконец-то, над леСОМ взошла ЛУНА – одноглазый светоФОР. ЕЛЬник, кажется, залит таинственным сиянием, уПАЛ ТУСклый свет на поле. В другом файле (словаре) слова близкие по тематике:Сом,Луна,Форель,Палтус. Необходимо найти слова в тексте и выделить их цветом. |
16.01.2008, 00:45 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
алгоритм цифрового поиска наверно пойдет. загружаешь слова из файла словаря и формируешь на их основе дерево. потом быстренько по буквам пробегаешь и ищешь в дереве слово, если нашли, значит выделяем
|
16.01.2008, 01:09 | #3 |
Регистрация: 16.01.2008
Сообщений: 7
|
Я уже пытался воспользоваться "деревом",но попытка была отвергнута как "не подходящая для этой задачи".А также я пытался воспользоваться алгоритмом поиска Бойера-Мура и тоже мне указали на неправильность этого подхода...
|
16.01.2008, 07:01 | #4 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Удалите из текста все разделители и ищите нужную подстроку.
Последний раз редактировалось puporev; 16.01.2008 в 07:05. |
16.01.2008, 10:36 | #5 |
Регистрация: 16.01.2008
Сообщений: 7
|
Хорошо,а удалив все ограничители,как после этого выделить цвемтом найденные слова?
|
16.01.2008, 11:46 | #6 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Я Си не знаю, поэтому объясню на словах. Просматриваем строку с конца до начала и пока позиция первого знака искомой подстроки >0 менять цвет символов с этой позиции до конца подстроки.
В Паскале это так: for i:=1 to lendgth(s) do while pos('сом',s) do begin for j:=pos('сом',s) to lendgth('сом') do менять цвет символов end; |
16.01.2008, 11:54 | #7 |
Регистрация: 16.01.2008
Сообщений: 7
|
ведь таким способом можно выделить только символы в строке,а в программе надо вывести искомый текст с найденными словами,которые выделены другим цветом.
|
16.01.2008, 12:03 | #8 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Извините, недопонял. Если бы не пробелы, то все бы работало, а так надо думать, как решить проблему пробелов.
|
16.01.2008, 17:35 | #9 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
не знаю чесна говоря почему были отвергнуты "деревянные" алгоритмы... Просто при поиске проверять, что если это разделитель (пробел,\n,\t,...), то пропускаем его и проверяем следующий символ
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вот это задачка!!! | Лёха | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.04.2008 10:54 |
Задачка для ума 3 | ZORRO2005 | Microsoft Office Excel | 14 | 23.04.2008 12:35 |
Очень непростая схема | vitalik007 | Общие вопросы Delphi | 3 | 21.01.2008 22:11 |