Du suchst also nach eines Pos-Funktion, der Du einen Startindex mitgibst, ab der gesucht werden soll?
Suche nach faststrings.pas, eine Sammlung von schnellen Stringroutinen, oder hier im Forum nach bereits gelösten Problemem. Deine Frage ist sehr populär...
Ich habe mir so eine Funktion selbst geschrieben, allerdings sehr 'billig'. Für meinen Fall war die allerdings ausreichend schnell:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Function FastPos (Const aSubStr, aString : String; aStart : Integer) : Integer; Var c : Char; n,m : Integer; Begin Result := aStart; m := Length (aSubStr); n := Length (aString) - m + 1; c := aSubStr[1]; While Result < n do begin While aString [Result] <> c do If Result = n Then break else inc (Result); If Ansiuppercase (Copy (aString , Result, m)) = aSubStr then Exit; inc (Result); End; Result := 0 End; |
Parameter dürften klar sein. Funktionsweise: Ich suche einfach nach dem ersten Auftreten des ersten Zeichens vom SubString. Wenn ich den gefunden habe, schaue ich, ob der Rest auch passt.
Wenn Du einen richtig schnellen Algorithmus schreiben willst, suche nach KMP (Knuth-Morris-Pratt) oder nach Boyer-Moore.