Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Поиск по маске


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

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

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

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

Автор: neutrino 15.8.2003, 17:08
Вот смотри, я написал это когда-то давно на форуме. Правда когда прочитал, обхохотался от моей смеси паскаля и С++ 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;


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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)