Klammern auflösen



  • hey jungs,

    hier mal wieder ein totaler C++ blutiger Anfänger!Ich habe jetz endlich eine laufende version meines Taschenrechners fertig!

    in dieser version habe ich mit "case" gearbeitet! nun habe ich mir sagen lassen das man mit "string" besser dran wäre! ich will nun meinen rechner umschreiben und gleich noch klammernrechnung d.h. (man sollte klammern in der klammer berechnen) einbauen! habe aber keine idee bis jetz!

    das einzige was ich bis jetz habe ist. das die eingabe überprüft wird auf komma, wenn eins gefunden wird, wird dieses durch einen punkt ersetzt! das soll in dieser version auch rein!

    Wäre cool wenn mir jemand nen kleinen anfang schreiben könnte, bzw. soweit damit ich einfache klammern in einer rechnenaufgabe lösen kann.

    zum bsp. soll diese aufgabe gelöst werden: (12.5 + 11.5) + 5 =

    ich hoffe mir kann jemand nen anstoß geben das ich dann für die restlichen rechnenoptionen und ( ( ) ) lösen kann.

    ach nur zur information das alles wurde mit DEV C++ programmiert



  • Stichwort: Parser

    (übrigens hat 'case' und 'string' herzlich wenig miteinander zu tun - als Ansatz könntest du die Verarbeitung von char*-Daten umstellen auf std::string, das lässt sich dann sicher weiter ausbauen)

    das einzige was ich bis jetz habe ist. das die eingabe überprüft wird auf komma, wenn eins gefunden wird, wird dieses durch einen punkt ersetzt! das soll in dieser version auch rein!

    std::replace()



  • Berliner schrieb:

    ...C++ Leihe...

    Ich hatte mich schon gefragt, wo mein C++ ist: Gib's zurück !

    Gruß,

    Simon2.



  • hey jungs thx für die denkanstöße aber mir wäre besser geholfen wenn jemand mir nen anfang vorlegen kann! wie gesagt für diese Bsp. Aufgabe (12.5 + 11.5) + 5

    es wäre nett wenn mit jemand bis dahin sprich das ich diese aufgabe lösen kann nen ansatz gibt. um den rest werd ich mich selbst versuchen zu kümmern!



  • Wenn deine Funktion zum Auswerten "double expression()" heißt, dann rufst du bei einem '(' einfach rekursiv die Funktion "expression" wieder auf, nachher überprüfts du dann noch, ob das nächste Zeichen gleich der schließenden Klammer ist.

    Wie gesagt, die Grundlagen eines Parsers solltest du beherrschen, am besten du baust dir einen "recursiv descendant (one-) look-ahead parser".
    Am besten du erzeugst dir ersteinmal eine EBNF (Ext. Backus-Naur Form) deines Ausdrucks, z.B.

    Expression = Term | Term ('+'|'-') Expression
    Term = Factor | Factor ('*'|'/') Terminal
    Terminal = '(' Expression ')' | ('+'|'-') Expression | Zahl
    Zahl = Ziffern ['.' Ziffern]

    etc...

    Die Namen entsprechen dann einfach deinen Funktionen, welche du dann iterativ bzw. rekursiv entsprechend des nächsteingelesenen Zeichens aufrufst.


Anmelden zum Antworten