doubles aus String ziehen



  • Hallo!

    Ich hab folgenden String (als Bsp):
    ((12.3,2,3.2,32))
    und möchte die double-Werte kriegen.
    Ich bin eigentlich mehr mehr Java zu Gange und habe unter C nun meine Probleme.
    Der String ist ein char-Array.
    In Java hätte ich einfach je die beiden klammern abgeschnitten, mit StringTokenizer bis zum Komma getrennt und in double umgewandelt - in C++ stehe ich aufm Schlauch.

    Habt ihr gute Tipps?
    danke!



  • Bei char-Arrays kannst du ja strtok() verwenden, auch wenn ich lieber mit std::string arbeiten und die Einzelteile mit find() und substr() rausschneiden würde.



  • Auch wenns vielleicht bissl overkill fürs ertse ist: schau dir mal die Doku zu boost::spirit an, die haben genau deine Problem (komma-getrennte Liste von doubles) als Beispiel verwurstet.



  • Hallo!

    Das Cstoll-Beispiel hhat schon gut geholfen. Verbleibt nur noch das Problem "((17.5" - so sieht dann nämlich der erste geschnittene Teil aus.
    Gibt es sowas, wie substring in Java, dass ich nur ab der 3.Stelle den String nehmen kann?



  • Welches Beispiel jetzt? strtok() oder string::find()? Bei ersterem kannst du einfach "str+2" als Startposition übergeben, dann überspringst du die ersten beiden Zeichen.



  • strtok war gut.
    ...und wo gebe ich diese Startposition an? Beispiel?
    Danke für die vielen Bemühungen!



  • Stefan2307 schrieb:

    strtok war gut.
    ...und wo gebe ich diese Startposition an? Beispiel?
    Danke für die vielen Bemühungen!

    Ah, schon klar... nochmal danke!



  • Stefan2307 schrieb:

    strtok war gut.
    ...und wo gebe ich diese Startposition an? Beispiel?
    Danke für die vielen Bemühungen!

    Der erste Parameter an strtok() gibt an, wo mit der Suche begonnen werden soll:

    char input_data[] = "((12.3,2,3.2,32))";
    char* ptr = strtok(input_data+2/*hier übergibst du die Startposition*/,",");
    while(ptr!=0)
    {
      //Umwandeln und Auswerten der Eingabe
      ptr=strtok(NULL,",");
    }
    

Log in to reply