Привет всем), вот в чем вопрос, я ищу слово методом pos и если в слове не хватает одного символа, то он все равно думает что это искомое слово, нужно что бы он искал точ в точ то слово которое нужно и с учётом регистра. Что можете предложить?
Для начала ознакомиться с алгоритмами поиска подстроки в строке, а потом закодить алгоритм Бойера-Мура(или найти готовую реализацию, как больше нравится). up: если имеется в виду поиск целого слова в предложении, то всё гораздо проще. Pos возвращает индекс первого символа подстроки в искомой строке, следовательно нужно добавить проверку символов pos-1 и pos+длина_подстроки+1, чтобы они не являлись буквенными.
, я просто ищу методом pos в тексте, это не надёжно, пример покажи этого -( проверку символов pos-1 и pos+длина_подстроки+1,) пжлст
Создай динамический массив, размером в искомый текст и через вложенный цикл, посимвольно сравнивай с данным текстом. Что сложного то? В гугле все есть
Функцию PosEx - эта функция есть в модуле StrUtils я её от туда взял и не много переписал. Лови исходник: Code: var Form1: TForm1; List:TStringList; implementation {$R *.dfm} function ReadTxt(FileName:string):string; var FS : TFileStream; begin Result:=''; if FileExists(FileName) then begin FS := TFileStream.Create(FileName, fmOpenRead); FS.Seek(0,soFromBeginning); SetLength(Result,FS.Size); FS.ReadBuffer(Pointer(Result)^, FS.Size); FS.Free; end; end; function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer; var I,X: Integer; Len, LenSubStr: Integer; begin if Offset = 1 then Result := Pos(SubStr+' ', S) else begin I := Offset+LenSubStr; LenSubStr := Length(SubStr+' '); Len := Length(S) - LenSubStr + 1; while I <= Len do begin if S[I] = SubStr[1] then begin X := 1; while (X < LenSubStr) and (S[I + X] = SubStr[X + 1]) do Inc(X); if (X = LenSubStr) then begin Result := I; exit; end; end; Inc(I); end; Result := 0; end; end; procedure TForm1.Button1Click(Sender: TObject); begin List.Text:=ReadTxt(sFilenameEdit1.Text); if PosEx(Edit1.Text, List.Text)<>0 then ShowMessage('Найдено: '+Edit1.Text) else ShowMessage('Не нашлось'); end; procedure TForm1.FormCreate(Sender: TObject); begin List:=TStringList.Create; end; end. Исходник