Zahl aus string auslesen



  • Hallo!
    Ich glaub, ich steh im Moment ein bisschen auf der Leitung, ich habe folgende Zeile:

    1 275 1 151 1 1
    und ich möchte die Zahlen 275 und 151 herausbekommen und in einem integer speichern.
    Mein Ansatz:

    int xdim, ydim;
     istringstream dim(z5);
     if(!dim) crash("main","failed to open stringstream dim");
     string sxdim,sydim;
     getline(dim,sxdim,' '); //sxdim =1
     getline(dim,sxdim,' '); //sxdim = what I want
     getline(dim,sydim,' ');
     getline(dim,sydim,' ');
    

    Aber bei sovielen Leerzeichen in meiner Zeile kann das natürlich nicht funktionieren (z5 ist der string in dem die Zahlen wie oben stehen)

    Trotzdem fällt mir kein Weg rundherum ein..

    vielen Dank für antworten,
    lg,
    Iso



  • file.txt

    1 275 1 151 1 1
    

    app.cpp (from scratch)

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
    
    int main()
    {
        std::fstream file("file.txt", std::ios::in);
        if(!file) {
            std::cerr << "cannot open file" << std::endl;
            return 1;
        }
        std::string line;
        if(!std::getline(file, line)) {
            std::cerr << "cannot read line from file" << std::endl;
            return 2;
        }
        // stringstreams benutzen
        std::stringstream ss(line);
        unsigned int number;
    
        while(ss >> number) {
            // anstatt die zahlen auszugeben, kannst du sie ja auch in einen
            // std::vector speichern oder direkt die zahlen rausziehen, die du
            // brauchst mit hilfe einer if-Abfrage ;)
            std::cout << number << std::endl;
        }
    }
    


  • Hallo Iso,

    einfach lesen was da steht ..

    const char* z5 = "1 275 1 151 1 1";
        istringstream dim(z5);
        string dummy;
        int xdim, ydim;
        if( dim >> dummy >> xdim >> dummy >> ydim )
            cout << "1.Zahl = " << xdim << " 2.Zahl = " << ydim << endl;
    

    Gruß
    Werner


Anmelden zum Antworten