Zitat von
alzaimar:
... Oder ... oder ...
OK, das geht auch
hatte es nur so gelößt, damit man dann auch noch "mod" und Co. einfach nachrüsten kann
(wie hier unten die Klammern, beim Zerlegen, reingequetscht werden, braucht man nur
'a'..'z', 'A'..'Z' bei den Zahlen reinmachen und hat auch noch Wörter, wie Named-Operators, mit geparst )
Zitat:
2*+2
ja, das + und - wird doppelt ausgewertet
- einmal als Vorzeichen ganz am Anfang, da höchste Priorität
- und nochmal ganz am Ende als Operator, da niedrigste Priorität
nein, der kann noch keine Klammern
das hier sollte "nur" ein kleiner "einfacher" Anfang werden,
nicht so wie da
http://www.delphipraxis.net/internal...t.php?t=159592
man müßte nur noch "(" und ")" beim Zerlegen mit beachten
Code:
For i := 1 to Length(S) do
Case S[i] of
...
'*', '/', '+', '-'[color=#ff0000], '(', ')'[/color]: Begin
und dann kommt unten als erste "höchstwertige" Auswertung dieses rein
Delphi-Quellcode:
For i := 0 to SL.Count - 3 do
If (SL[i] = '(') and TryStrToFloat(SL[i + 1], a) and (SL[i + 2] = ')') Then Begin
SL.Delete(i + 2);
SL.Delete(i);
Goto Loop;
End;
[add]
hab aber wirklich eine Vereinfachung gefunden
If ((i = 0) or AnsiMatchText(SL[i - 1], ['*', '/', '+', '-']))
dieses war ja einfach nur für "ist Operator", was doch auch soviel wie "ist keine Zahl" heißt
also dieses sollte stattdessen auch gehn
If ((i = 0) or not TryStrToFloat(SL[i - 1], b))
[add]
hier noch mit Klammern und Div/Mod
und ja natürlich kann man da vieles noch optimieren und zusammenfassen, aber das kann auch jeder selber machen