Smartie hat folgendes geschrieben: |
Danke schön, das funktioniert soweit!
Aber, mal was anderes, warum ist die For-Schleife schneller? |
In Pascal ist for immer dann schneller, wenn der Endwert sich aus einem Ausdruck ergibt - dieser wird nämlich nur einmal statt bei jedem Schleifendurchlauf ausgewertet. Was der Compiler daraus erzeugt, ist praktisch dieses:
Delphi-Quelltext
1: 2: 3: 4: 5:
| n := Length(fu); for i := 1 to n do begin ... end; |
Length(fu) wird nur einmal aufgerufen. Das ist auch semantisch wichtig: Wenn sich innerhalb der Schleife die Länge von fu ändert, hat das keinen Einfluss auf die Anzahl der Schleifendurchläufe. In dem Fall müsste man eine repeat .. until oder while-Schleife verwenden.
Ist mir ausserdem gerade noch aufgefallen: Die repeat-Schleife an der Stelle war auch ein etwas versteckter Bug: Wenn man die Funktion mit einem Leerstring aufruft, knallt es, weil die Schleife trotzdem mndestens einmal durchlaufen wird und so versucht wird, auf das erste Zeichen eines leeren Strings zuzugreifen.
Stefan