Der Geschwindigkeitsgewinn ist bei wenigen Durchläufen minimal. Bei meinem Test '10+20*10-x^2*234,5+(10+20)*30' mit 10000 Durchläufen waren es ca. 50 ms Gewinn;
Ändere mal meine pos0Ex Funktion in folgende um. Danach hatte ich einen Gewinn zu deiner Version von ca. 200 ms.
Code:
[b]function[/b] pos0Ex([b]const[/b] c: Char; [b]const[/b] s: [b]string[/b]; out ResultValue: Integer): Integer;
[i]//pos0Ex findet das Zeichen "+","-" ... nicht innerhalb von Klammern[/i]
[b]var[/b] k, z: Integer; [i]//z:=Anzahl der Klammern[/i]
[b]begin[/b]
z := 0;
[b]for[/b] k := 1 [b]to[/b] Length(s) [b]do[/b] [b]begin[/b]
[b]case[/b] s[k] [b]of[/b]
'(': Inc(z);
')':
Dec(z);
[b]else[/b]
[b]if[/b] (z = 0) [b]and[/b] (s[k] = c) [b]then[/b] [b]begin[/b]
Result := k; [i]//Treffer[/i]
ResultValue := k;
Exit;
[b]end[/b];
[b]end[/b];
[b]end[/b];
ResultValue := 0;
Result := 0;
[b]end[/b];