Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск подстроки в строке по маске, Срочно! 
:(
    Опции темы
Krokodil
Дата 12.12.2004, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.12.2004

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



Дана строка.
Маска :
* - любое количество символов(межет и ни одного).
? - один символ(может и ни одного).
Определить , подходит ли данная строка под заданную маску.
Заранее спасибо. smile
PM MAIL   Вверх
Zero
Дата 12.12.2004, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



У тебя не корректно написано, чтобы нам было понятно, напиши пример входящих данных и исходящих (результат)
Насколько я понял, то получается: что вначале идёт приглошения для ввода строки, а потом пользователь её вводит, и в результате выходит, что
* ─ подходит (так как
? ─ подходит ( один или не одного (или более) символа строка всегда содержит
PM MAIL ICQ   Вверх
Krokodil
Дата 14.12.2004, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 5.12.2004

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



Входная строка :
123абвг456
Маска :
123*456
Ответ :
Подходит.

Входная строка :
123абвг456
Маска :
123?456
Ответ :
Не подходит.

Входная строка :
123456
Маска :
*аа*
Ответ :
Не подходит.

Входная строка :
12345678
Маска :
?456
Ответ :
Не подходит.

Входная строка :
345678
Маска :
?456
Ответ :
Подходит.

smile P.S. Надеюсь, теперь будет по-понятнее.
PM MAIL   Вверх
Zero
Дата 17.12.2004, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Цитата(Krokodil @ 14.12.2004, 19:33)
P.S. Надеюсь, теперь будет по-понятнее.

Конечно!!! smile Извени что долго не отвечал, просто у меня сессия началась, сегодня сдал экзамен, поэтому появилось время залесть в и-нет.
Держи прогу
Код

program Maska;
var
s,m:string;
Begin
 write('Введите исходную строку: ');
 readln(S);
 write('Введите маску строки: ');
 readln(m);
 repeat
   if m[1]=s[1] then
     begin
       delete(s,1,1);
       delete(m,1,1);
     end else

   if m[1]='*' then
     begin
       repeat
         if s[1] in ['a'..'z','A'..'Z'] then delete(s,1,1);
       until not(s[1] in ['a'..'z','A'..'Z']);
       delete(m,1,1);
     end else

   if m[1]='?' then
     begin
       if s[1] in ['a'..'z','A'..'Z'] then delete(s,1,1);
       delete(m,1,1);
     end else

   if m[1]<>s[1] then begin writeln('Ответ: Неверно'); exit; end;
 until length(s)=0;
 writeln('Ответ: Верно');
end.

Правдо я её особо не тестиовал, возможно что-то не предусмотрел, но в основном вроде всё так. smile
PM MAIL ICQ   Вверх
Marriage
Дата 19.12.2004, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

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



Zero

А числа у тебя учтены ????


Предлагаю другой вариант


Проверяйте....

Писал в делье, поэтому для паскаля придется чуток подправить ...
Добавлено @ 02:45
Zero

А числа у тебя учтены ????


Предлагаю другой вариант

Код


var
s,m:string;
i,y:Integer;
res:boolean;
Begin

res:=TRUE;       //прелположим, что строки подходит
S:='123456';    //строка
m:='123?';      //маска

i:=0;           //обнуляем счетчик строки
y:=0;           //обнуляем счетчик маски






repeat

  Inc(i);        //устанавливаем в  1
  Inc(y);        //

  IF s[i] <> m[y] then   //Если элемент маски не равен элементу строки
   Begin

    IF m[y]='?' then    //? - это любой символ, забиваем на всё и идем дальше
     Begin
      continue;
     end;

    IF m[y]='*' then    //Множество любых символов
                        //наращиваем маску на следущий символ
     BEgin

      inc(y);

      If m[y]=#0 then   //конец маски, то есть любое количество любых символов
       Break;            //выход из цикла
      Repeat             //
        inc(i);          // наращиваем индекс строки до тех пор , пока не совпадет символ с символом маски
      Until (s[i]=m[y]) or (i>Length(s));//или пока не достигнут будет конец строки



      continue;
     end;

    res:=False; //ЛОЖ
   End;




until i=Length(s);



IF res then
 Writeln('Èäåíòè÷íî!!!')
else
 Writeln('Íå èäåíòè÷íî!!!');


end;



Проверяйте....

Писал в делье, поэтому для паскаля придется чуток подправить ...

Это сообщение отредактировал(а) Marriage - 19.12.2004, 02:46


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Romtek
Дата 7.1.2005, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

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



Код
Function StrMatch (S, WildCard: String): boolean;
var i, j, slen, wlen :integer;
   fnd: boolean;
begin
  fnd := true;
  if not (WildCard = '*') then
   begin
    i := 1;
    j := 1;
    wlen := Length (WildCard);
    slen := length (S);
    repeat
     if WildCard[i] = '*' then
      begin
       inc (i);
       if i<= wlen then
       while(j <= slen) and (WildCard[i] <> S[j]) do
           inc(j);
       fnd := (j <= slen) or (i > wlen);
      end;
     while ( j <= wlen )
           and (i <= slen)
           and (WildCard[i] <> '*')
           and fnd
           do
      begin
       if WildCard[i] <> '?' then
         fnd := (WildCard[i] = S[j]);
       inc (i);
       inc (j);
      end;
   until (j > wlen) or (i > slen) or not fnd;
  end;
StrMatch := fnd;
end;

--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

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

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


 




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


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

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