Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по маске, Эффективный алгоритм 
:(
    Опции темы
Nastya
Дата 14.8.2003, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: нет
Всего: 44



Такая задача:
В нужно оперделить есть ли в файле строка соответствующая маске.

Маска как всегда может содержать любой символ, символ ? - заменяет один символ или не одного. * - заменяет любое количество симолов.


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
p0s0l
Дата 14.8.2003, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



Не знаю, прогаешь ли ты под Delphi, но там есть юнит Masks с готовой функцией MatchesMask:
function MatchesMask(const Filename, Mask: string): Boolean;

Также для Borland C есть тот же самый masks.hpp. А в MSVC - не знаю...
Если чо, дак глянь там алгоритм - он небольшой, пару страниц.



--------------------
С уважением, г-н Посол.
PM   Вверх
neutrino
Дата 15.8.2003, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Вот смотри, я написал это когда-то давно на форуме. Правда когда прочитал, обхохотался от моей смеси паскаля и С++ smile.gif Ну в общем-то этот раздел по алгоритмам. А язык неважен, так что "до ума" доводить не буду:
Цитата

Вот функция, скорее всего не работает, но алгоритм примерно такой. Функция возвращает истину в случае если строка s подходит мод маску m:

function Is(s, m: string): Boolean;
var
l, i, j, cs, cm: Integer;
begin
cs := 0;
cm:=cs;
l := Length(s)
for i:=1 to l do
begin
  j := l;
  case m[cm] of
    '*' :
      while(j>cs and s[j]!=m[cm+1]) do j:=j-1;
      if cs=j then return False;
      cs:=cs+(l-j);
    '?' : if cs<l then cs:=cs+1 else return False;
    else if m[cm]==s[cs] then cs:=cs+1 else return False;
  end;
  cm:=cm+1;
  if (cs=l) return True;
end;
return False;
end;




--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Nastya
Дата 15.8.2003, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: нет
Всего: 44



Почему я задала этот вопрос, в задании предлагалось для решения задачи использовать двусвязный список.
Вопрос как, и зачем?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
neutrino
Дата 16.8.2003, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Странно... Можно, конечно, записать строки в двусвязные списки ... Вот только что это даст? Может это просто такие требования? Что строки должны быть в списках?


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0751 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.