[gelöst] Zu doof für Substr()?



  • Hallo!
    Ich würde gerne aus einem String vier Daten auslesen.
    Beim "Vornamen" geht das allerdings schon schief.
    Hat jemand eine Ahnung, was ich falsch mache?
    Das Programm stürzt schon vor der ersten testausgabe ab.
    Vielen Dank für Eure Zeit!

    //kunden.cpp
    #include <iostream>
    #include <string>
    #include "kunden.h"
    
    void /*kartei::*/einfuegen()    {
        std::string data;
        std::cout << "Nachname, Vorname, Beruf, Alter: ";
        std::cin >> data;
        kunde * neuerKunde = new kunde;
    
        /* Kopiere Substring mit dem Nachnamen */
        int pos = 0, len = -1;
        while(data[++len] != ',');
        neuerKunde->nachname = data.substr(0, len);
    
        /* Kopiere Substring mit dem Vornamen */
        pos = len + 2;                                   //pos ist jetzt der Anfang des Vornamens
        while(data[++len] != ',');
        std::cout << data.substr(pos, len);
        neuerKunde->vorname = data.substr(pos, len - pos);
        std::cout << neuerKunde->vorname;
    
        /* Kopiere Substring mit dem Beruf */
        pos = len + 1;
        while(data[++len] != ',');
        neuerKunde->beruf = data.substr(pos, len - (pos + 1));
    
        /* Lese Alter aus data */
        int alter = 0;
        while(data[++len]) alter = alter*10 + (data[len] - '0');
        neuerKunde->alter = alter;
    
        neuerKunde->next = NULL;
    
    }
    

    Die Kopie des Nachnamens funktioniert noch einwandfrei, weswegen ich bezweifle, dass es an meiner Struktur liegt, die ich deswegen nicht gepostet habe.



  • also wenn ich das richtig sehe wird in zeile 18 deines codes die position auf quasi den ersten buchstaben des vornamens gesetzt
    aber die position des kommas ist immer noch in length und dort suchst du erstmal weiter

    mach einfach zu dem pos = len + 2 noch len += 2



  • wow, danke für die fixe Antwort!
    Aber wird in Zeile 19 nicht len erst inkrementiert und dann für den Vergleich herangezogen?
    Leider klappt es selbst mit len += 2 nicht.



  • komische konstruktion mit len und pos in deinem Code.
    Enthält der Daten-String "data" den auch den entsprechenden Text? Mal debuggen oder auf der konsole ausgeben lassen.

    Sonst gilt es mit dem Debugger durchsteppen und "pos" und "len" überwachen, ob alles wie gedacht läuft.

    und schau dir bei gelegenheit evtl mal das beispiel hier an:
    http://www.cplusplus.com/reference/string/string/find/



  • Inwiefern komisch?
    Wie kann ich denn find() für meine Zwecke nutzen? Ich weiß ja noch nicht, wie die Daten im Einzelnen aussehen.
    Das mit dem Debugger hab ich gemacht: len läuft mir bei dem zweiten Aufruf über das Stringende hinaus, obwohl ich die Daten in der Form "Mustermann, Max, Elektriker, 36" eingegeben habe. Das verstehe ich nicht...



  • Oh, hab's entdeckt.
    Über cin >> wird bei dem ersten Leerzeichen abgebrochen, das wusste ich nicht mehr.
    Danke für eure Mühen.


Anmelden zum Antworten