zahlen von string parsen



  • Hallo!
    Ich habe solche strings:

    char line[512] = "224 278  224 278  224 278  224 278  224 278  224 278  225 264  224 278  224 278";
    

    Ich moechte immer zwei zahlen nacheinander von links nach rechts davon raus-parsen.

    Das Problem:
    Da sind nicht immer 9 Zahlenpaare in einer Zeile. Ich weiss aber schon immer wie viele.
    Wie kann ich erreichen, dass teile eines strings, die mit sscanf schon geparst wurden, nicht mehr wieder verwendet werden? Sprich, das folgende functioniert so nicht:

    for (int i=0;i<9;i++) 
        sscanf(line, "%d %d ",&x,&y);
    

    weil immer nur die ersten beiden zahlen geparst werden.

    Danke im Voraus,
    Olli


  • Administrator

    Naja, verwende einfach C++:

    std::string line = "224 278  224 278  224 278  224 278  224 278  224 278  225 264  224 278  224 278";
    
    std::istringstream iss(line);
    
    int n1, n2;
    
    for(int i = 0; i < 9; ++i)
    {
      iss >> n1 >> n2;
    
      // Mach was damit.
    }
    

    Grüssli



  • Oder:

    //...
    std::stringstream sstr(line);
    
    while(sstr >> x >> y)
    {
        std::cout << x << ',' << y << '\n';
    }
    


  • Jo, Danke!

    Ich arbeite in QT und da muss ich jetzt nur noch die Entsprechungen zu stringstream suchen. (ist QTextStream)

    aber danke fuer eure Hilfe. Ich komme aus der guten alten reinen C Welt, und bin noch nicht an diese Streams und >> Operatoren gewoehnt.

    Gruesse,
    Olli


  • Administrator

    olidem schrieb:

    Ich arbeite in QT und da muss ich jetzt nur noch die Entsprechungen zu stringstream suchen. (ist QTextStream)

    Hä? Oder auf gut Deutsch, wie bitte? std::stringstream , bzw. std::istringstream , ist in der C++ Standard Bibliothek. Wieso kann man diese in QT nicht benutzen? Bzw. wieso musst du die QT Entsprechung dazu finden?

    Grüssli



  • Weil diese Bibliotheken nicht includiert sind und ein manuelles #include <iostream> Fehler produziert (und nicht wenige 🙂 )



  • Dann schau dir an welche Fehler das sind und stell die ab. An Qt liegt das jedenfalls nicht.



  • olidem schrieb:

    Ich komme aus der guten alten reinen C Welt

    olidem schrieb:

    Weil diese Bibliotheken nicht includiert sind und ein manuelles #include <iostream> Fehler produziert (und nicht wenige 🙂 )

    Du benutzt aber hoffentlich nicht einen guten alten reinen C-Compiler oder? 😉
    Was für Fehler produziert er denn? (Wenns viele sind reichen die ersten 3 oder 4...)
    Btw: für strings und stringstreams brauchst du auch kein <iostream> sondern <string> und <sstream>



  • pumuckl schrieb:

    Du benutzt aber hoffentlich nicht einen guten alten reinen C-Compiler oder?

    Der dürfte sich mit Qt ziemlich schwer tun.


Anmelden zum Antworten