поиск слова в строке
От: Damx  
Дата: 04.05.03 15:04
Оценка:
Здравствуйте! Есть строка E3 и строка E1. Строка E3 состоит из нескольких групп сиволов (в т. ч. пробелов), разделенных символом '; ' (точка с запятой и пробел); а E1 из группы символов (в т. ч. пробелов). Требуется узнать, является ли E1 одной из групп символов (точки с запятой и пробелы после них в группы символов не входят) строки E3. Пишу следующее:

function qwerty: boolean;
var q, w :word;
    m: set of char;
    s0: string;
begin
m:= [';'];
s0:= '; ' + e1;
w:=length(s0);
  q:= pos (s0, e3);
  if (q<>0) and (e3[q+w] in m) then
  begin
    result:=true;
  end
  else
    result:= false;
end;

Но: если строка E3 имеет вид, например, 'russia1; russia', то при E1 = 'russia', result=false, а при E3 = 'russia1; russia', то true (то есть если одна из групп символов (1) полностью входит в другую группу сиволов (2), и (2) идет перед (1), то (1) не "ловится"). Как это исправиль. Спасибо заранее.
Re: поиск слова в строке
От: AkaSaint  
Дата: 04.05.03 16:07
Оценка:
Здравствуйте, Damx, Вы писали:

D>s0:= '; ' + e1;

D>w:=length(s0);
D> q:= pos (s0, e3);

D>Но: если строка E3 имеет вид, например, 'russia1; russia', то при E1 = 'russia', result=false, а при E3 = 'russia1; russia', то true (то есть если одна из групп символов (1) полностью входит в другую группу сиволов (2), и (2) идет перед (1), то (1) не "ловится"). Как это исправиль. Спасибо заранее.


По-моему, для приведенного тобой примера при E1='russia1' ты никогда его не найдешь в E3 по твоему алгоритму, если russia1 стоит в начале E3.
Re: поиск слова в строке
От: Ангел Россия  
Дата: 04.05.03 17:33
Оценка:
Здравствуйте, Damx, Вы писали:
function qwerty: boolean;
var 
  z,w :integer;
  a,c,e:integer;
  s0,s1: string;
begin
  //s0:= '; ' + e1; // 'ЭТО неправильно, правильно когда знак ; в конце! тоесть: s0:= e1+'; ';
  s0:= e1+'; ';
  s1:=e3+';';
  w:=length(s0);
  z:length(s1);
  if w-z>0 then begin
  for a:=1 to w-z do
  begin
    e:=0;
    for c:=1 to z do
      if s0[a+c-1]=s1[c] then inc(e);
    if e=z then
    begin
      result:=true ;
      break;
    end
    else
      result:=false;
  end;
end;

в блокноте набрал, но вроде должно работать — а если твой код брать просто поменяй строку s0:= '; ' + e1; на s0:= e1+'; '; должно конать
Ан.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.