eine Idee
Hi,
ich werf mal eine Idee in die Runde.
Mit reinen reg. Ausdrücken fällt mir nichts ein aber zusammen mit ein klein wenig programmieraufwand.
‚Rechnung‘ wie (3+4*(6/4+(6*-8)+7)) ) zu validieren?
Schritt 1: Zähle die Anzahl der des Zeichens „(“ (die muß gleich sein der Anzahl der „)“ Zeichen.
Schritt 2: Schleife von von 0 bis zur Anzahl
in der Schleife:
Schritt 3: Ermittle letzes Vorkommen des Zeichens „(“ und das nächste Zeichen ab dieser Stelle „)“
Schritt 4: Hol diesen String und validiere mit reg.Ausdrück ob es eine math. Operation ist. (Dies sollte einfach sein)
Schritt 5: Rechne den Ausdruck aus. Dies ist etwas aufwendiger. Zahlen suchen und konvertieren und die 4 Rechenarten suchen.
Schritt 6: Ersetze den String mit dem Ergebniss das du bekommen hast.
Nun springt er wieder an den Anfang der Schleife und sucht wieder die innerste Klammer.
Ersetzt diese und macht weiter.
Bei (3+4*(6/4+(6*-8)+7)) würde nach dem ersten durchlauf stehen bleiben
(3+4*(6/4±40+7))
nun sucht er das (6/4±40+7)
dies sollte er rechnen können.
und stehen bleibt (3+4*-31,5)
und dann den Rest.
Würde das gehen ?
Ich denke nur das das richtige Rechnen beachtet werden muß.
z.B. bei „6/4±40+7“
Auch sowas sollte damit gehen
(5*(2+6)+(45/2))*(456-5(2+2))
Er würde erst den hinteren Teil zusammen ziehen dann der Vorderen nach und nach.
Ich habe es selbst nicht ausprobiert.
Wenn nicht - es war nur ein Gedanke 