Kein Wunder das die BM-Suche so langsam: Hier wird ja jedesmal der String gekürzt und BM liefert eh falsche Ergebnisse, denn er bricht beim ersten Fund nicht ab sondern sucht weiter. Da scheint ein 'exit' zu fehlen:
Delphi-Quellcode:
...
if j=m then
begin
// Muster gefunden
result := k - j + 1;
exit; // <<<<<<<<<<<<<<<<<<<<<<< Fehlt
// Die nächste Zeile ist auskommentiert, denn wir wollen ja nicht weitersuchen
// k := k + m; //oder: k+1, oder: break; je nachdem, wie man den Text komplett durchsucht haben will
end else
...
Das exit fehlt da nicht, das ist da mit Absicht nicht drin - steht ja so in den Original-Kommentaren: "//oder: k+1, oder: break; je nachdem, wie man den Text komplett durchsucht haben will"
Finde ich übrigens schön, dass mein Code hier als "Delphi-Original" gehandelt wird.
In meiner ursprünglichen Routine gab es auch einen optionalen Listen-Parameter, in den alle Fundstellen eingetragen werden konnten. Damit kann man sich dann das ständige Neu-Aufbauen des Skip-Arrays sparen.
Edit: Der Code ist von mir, die
Unit-Bezeichnung mit dem Pferd habe ich aber nicht verbockt.
The angels have the phone box.