Rechnung Aus String ausführen?
-
Hey,
ich hätte mal ne Frage:
ich habe zum Beispiel Funktion "5x+3" oder so in einem char*.
Ich würde jetzt gerne wissen, wie ich die Rechnung jetzt mit einem bestimmten x durchführen könnte, sodass ich auch ein Ergebnis kriege?
Danke schonmal!
-
2 Alternativen:
1. Alternative für Profis: Du liest den Term ein und wandelst ihn in einen AST (Siehe Wikipedia) um, suchst in dem AST nach allen Auftreten von der Variablen "x" und sagst ihnen Bescheid welchen Wert sie haben, oder gibst ihnen eine Möglichkeit das zu erfragen oder ersetzt sie ganz und gar mit dem Wert. Danach optimierst und vereinfachst du den AST vielleicht noch. Anschließend wertest du den AST aus.
2. Alternative für Arme: Du suchst x im String und ersetzt es durch den Wert. Bei der von Dir benutzten Syntax musst du natürlich aufpassen und eventuell noch Operatoren einbauen (sonst würde 5x natürlich zu 53 für x=3...) Und dann frickelst du dir irgendeinen Parser+Rechner zusammen, der sich so mit atoi und itoa durch den String wurschtelt und Rechnungs-Strings durch Ergebnis-Strings ersetzt, sodass am Ende ein Ergebnis-String übrig bleibt.
3. Alternative für Leute die nicht zählen können: Du nimmst eine Bibliothek her, die dir das macht.
Viele Grüße,
Deci
-
Ich lass mal nen Link hier: https://en.wikipedia.org/wiki/Shunting_yard_algorithm
Der lässt sich mit nem zweiten Stack auch leicht so umbauen, dass er gleich auswertet.
-
Gäbe es nicht auch irgendwie eine Möglichkeit einfach den gesamten String in eine "Funktion" umzuwandeln?
Also z.B.
int i = <Inhalt des Strings> // welcher jetzt z.B. "5+3" ist.Also einfach in die IDE hinschreiben, was im String enthalten ist?
Oder geht das einfach nicht?
-
Tomsen1410 schrieb:
Gäbe es nicht auch irgendwie eine Möglichkeit einfach den gesamten String in eine "Funktion" umzuwandeln?
Also z.B.
int i = <Inhalt des Strings> // welcher jetzt z.B. "5+3" ist.Also einfach in die IDE hinschreiben, was im String enthalten ist?
Oder geht das üerhaupt nicht?int i = 5+3...Wozu brauchst du das denn?
Strings sind bloß Strings und C++ bietet keine Möglichkeit, welche als mathematische Terme zu interpretieren. Das muss man selbst schreiben.
Das Stichwort für die Suchmaschine lautet "Parser".
-
Sicher, wenn der String zur Compilezeit bekannt ist. Wird aber etwas lustiger, ich glaube du willst sicher kein Metaprogramm mit boost MPL schreiben. ^^
Mal ernsthaft: Nein, natürlich geht das nicht. Was auch offensichtlich wäre wenn du verstehen würdest wie ein Programm kompiliert wird, was eine Funktion ist, was ein String ist, etc.
-
Ich weiß schon, wie ein Programm compiliert wird

Wollte nur mal fragen, ob es dafür vielleicht irgendeine Funktion oder sonst was gäbe. Und ich weiß auch, was ein String ist.
Ich schreib nur grad ein kleines WINAPI Programm für das Newton'sche Verfahren.
http://de.wikipedia.org/wiki/Newton-VerfahrenJedenfalls muss der User eine Funktion f(x) und dessen Ableitung f'(x) in ein Editbox eingeben. Diese liefern den Term nunmal als einen String und ich wollte halt fragen, ob man diesen dann auch auf leichte Weise "lösen" kann

Vielleicht gibt es ja auch eine "non-string return" Funktion von windows für den Text einer Editbox? Wäre für jede Hilfe offen.
-
Tomsen1410 schrieb:
Vielleicht gibt es ja auch eine "non-string return" Funktion von windows für den Text einer Editbox? Wäre für jede Hilfe offen.
Nein gibts nicht. Du musst dir einen Parser bauen oder (besser) einen Parser im Netz suchen, der sowas kann.
-
Guckst du hier muParser