Zeile mit String-Befehlen zerteilen und verrechnen



  • Hallo zusammen,

    ich habe einen Zeile, die wie folgt eingelesen wird:
    "X0 Y=-420/2"

    Ich möchte nun gerne mit der String-Standarbibliothek die Zeile
    so bearbeiten, dass Y verrechnet wird (sprich 210). Ausgabe der neuen Zeile wäre dann wie folgt "X0 Y-210".

    Wie kann ich dieses Problem am einfachsten lösen? Habe Grundkenntnisse in Zeigern und mit Stringverarbeitungsfunktionen, aber bei diesem Problem fehlt mit schon die
    herangehensweise.

    Kann mir einer einen Tipp geben, wie ich hier am einfachsten zum Ziel komme ?
    Werte können sich natürlich ändern.

    Danke im Voraus !



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • benji2010 schrieb:

    Kann mir einer einen Tipp geben, wie ich hier am einfachsten zum Ziel komme ?

    .. am einfachsten ist es, Code zu verwenden, den es schon gibt:

    #include <iostream>
    #include <sstream>
    #include <limits>
    // #include "expression.h" // siehe http://www.c-plusplus.net/forum/viewtopic-var-p-is-1642138.html#1642138
    
    namespace
    {
        const std::streamsize ALL = std::numeric_limits< std::streamsize >::max();
    }
    
    int main()
    {
        using namespace std;
        istringstream in("X0 Y=-420/2");
        int ergebnis; // double ergebnis; // wäre auch möglich
        if( in.ignore( ALL, '=' ) >> expression( ergebnis ) )
            cout << "Ergebnis= " << ergebnis << endl;
        return 0;
    }
    

    Die Ausgabe dieses Programms ist:

    Ergebnis= -210
    


  • Hallo Werner,

    danke für den schnellen Tipp. Allerdings kann die eingelesene Zeile auch mal wie folgt aussehen: "X0 Y=340/2 C=DC(0)". Dann kann man da mit ignore nicht so einfach abfangen.

    Ich hätte mich glaube mit strstr, strchr usw. an die Aufgabenstellung gemacht...



  • Benji2010 schrieb:

    Allerdings kann die eingelesene Zeile auch mal wie folgt aussehen: "X0 Y=340/2 C=DC(0)".

    was soll mit "DC(0)" passieren?

    das mehrfache Auftreten von Ausdrücken ist kein Problem - das ginge so

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <limits>
    #include "expression.h" // siehe http://www.c-plusplus.net/forum/viewtopic-var-p-is-1642138.html#1642138
    
    int main()
    {
        using namespace std;
        istringstream in("X0 Y=-420/2 C=(5+3*15)/5");
        int ergebnis; // double ergebnis; // wäre auch möglich
        for( string prefix; getline( in >> ws, prefix, '=' ) >> expression( ergebnis ); )
            cout << prefix << ergebnis << "; ";
        cout << endl;
        return 0;
    }
    

    Die Ausgabe ist hier:

    X0 Y-210; C10;
    

    .. aber was ist mit "DC(0)"?


Anmelden zum Antworten