string kette aus Zahlen in double einlesen



  • Folgenes Problem ich bin mit C++ erst vor kurzen Angefangen und habe unter Sufu nichts Gefunden.

    Mein Problem ist wie kann ich mehrere Strings der mehre Zahlen hintereinander beinhaltet in einen 2 Dimensionalen Typ:Double Vector Speichern/Konventieren.

    Aufbau des String bzw String Array
    0.18;2;5;7;........ Letzte Zahl endet ohne ';'
    0.2;4;13;............ Letzte Zahl endet ohne ';'

    Freue mich Auf Antworten


  • Mod

    Pack sie in einen std::stringstream und lies sie damit so aus, als ob sie eingegeben worden wären.

    Man muss sich natürlich fragen, wie die Zahlen überhaupt in den String gekommen sind. Wenn die ursprünglich aus irgendeinem Eingabestream stammen, dann kann man sich den ganzen Umweg über den String schließlich auch sparen.



  • Habe eine Datei mit ifstream aufgerufen und mit getline in einen String Array gespeichert und mit stringstream kann ich die Zahlen direkt auslesen ?
    Hättes du ein kleines Beispiel dafür?


  • Mod

    Nein, das ist gerade nicht gemeint. Lies doch direkt aus dem fstream!



  • crtzel schrieb:

    Hättes du ein kleines Beispiel dafür?

    ungefähr so:

    #include <fstream>
    #include <iostream>
    
    int main()
    {
        using namespace std;
        ifstream datei("input.txt");
        if( !datei.is_open() )
        {
            cout << "Fehler beim Oeffnen der Datei" << endl;
            return 0;
        }
        const int anzSpalten = 8; // Anzahl der Zahlen pro Zeile
        const int anzZeilen = 20;
        double arr[anzZeilen][anzSpalten];
    
        int zeile = 0;
        for( auto p = arr[0]; zeile < anzZeilen && datei.good(); datei >> ws, ++zeile )
        {
            datei >> *p++;
            for( int s = 1; s < anzSpalten && datei.ignore(1) >> *p; ++p, ++s )
                ;
        }
        cout << zeile << " Zeilen gelesen" << endl;
        return 0;
    }
    

    Gruß
    Werner



  • Das wirkt aber sehr gekünstelt, ein Stack-Array zu benutzen zumal explizit nach vector gefragt war.



  • Wutz schrieb:

    Das wirkt aber sehr gekünstelt, ein Stack-Array zu benutzen zumal explizit nach vector gefragt war.

    .. der Wutz hat's richtig gelesen. Und ich überlegte noch, ob ich dem TE nicht zum std::vector überreden sollte, verwarf es dann aber mit dem Hinweis auf '.. mit C++ erst vor kurzen Angefangen ..'
    Mit vector wird es irgendwie auch einfacher:

    #include <fstream>
    #include <iostream>
    #include <vector>
    
    int main()
    {
        using namespace std;
        ifstream datei("input.txt");
        if( !datei.is_open() )
        {
            cout << "Fehler beim Oeffnen der Datei" << endl;
            return 0;
        }
        const int anzSpalten = 8; // Anzahl der Zahlen pro Zeile
        vector< vector< double > > arr;
        for( ; datei.good(); datei >> ws )
        {
            vector< double > zeile( anzSpalten );
            auto p = begin(zeile);
            datei >> *p++;
            for( ; p != end(zeile) && datei.ignore(1) >> *p; ++p )
                ;
            if( datei )
                arr.push_back( move(zeile) );
        }
        cout << arr.size() << " Zeilen gelesen" << endl;
        return 0;
    }
    

    Gruß
    Werner


Anmelden zum Antworten