Wörter aus string lesen



  • Hallo,
    ich hab eine Textdatei,die so auschaut:
    Name Vorname,telfonummer....
    Name Vorname,telfonummer....
    Name Vorname ,telfonummer.... //leerzeichen nach dem komma könnte es auch geben

    Ich will dabei immer nur den Vornamen einlesen und dann mit einer Liste von Vornamen vergleichen,ob es sich um eine Frau oder Mann handelt und dann die komplette Zeile in eine andere entsprechende Textdatei(z.B. "Maenner.txt") schreiben.
    Das Problem ist,ich weiß nicht wie ich jeweils das zweite Wort,also den Vornamen
    lesen soll,wenn ich eine Zeile in einen string speichere.
    Ich hab es mit folgender routine mal versucht:

    int m_w(char *x,int &wert) //x ist eine zeile,wert steht für m oder w oder  manuell falls in der liste nicht vorhanden
    {
    
    int warte;
               int count=1,save;
               int a=0,b=0;
              while(x[count]!=' ')//bis zur ersten leerzeichen
              {count++;}
              count++;
             save=count;//hält die position fest,bei der das wort beginnt
              while(x[count]!=',')//bis zum komma,allerdings könnte das komma auch  erst nach ein paar leerzeichen kommen :(
              {
              a++;count++;
              }
             char *name= new char[a]; //erstell einen char-string in der länge des vornamens
    
              while(x[save]!=',')
              {
              name[b]=x[save];b++;save++;//überträgt den vornamen aus x in name
              }
    .
    .
    .
    

    Das Problem ist nun,wie das Wort rausgelesen werden soll,ohne das er mir immer irgend nen schmarn anhängt,wie z.B: "Angelika ⌂¢Xçò»"



  • Du mußt ein Array reservieren, das eins länger ist als der Name und dann mit 0 terminieren. Woher soll sonst die Ausgabe wissen, wo der string zu ende ist.

    Generel würde ich aber empfehlen dafür auf std::string zurückzugreifen.



  • Die Stringverarbeitung in C erwartet, daß deine Zeichenketten nullterminiert sind (am Ende ein '\0') - das trifft für deine Zeichenfolgen nicht zu. Und deshalb wird aller Datenmüll mit zu deinem String gerechnet, bis das Programm zufällig auf eine 0 stößt.

    Schnelle Lösung:

    //hinter der while()-Schleife anhängen:
    name[b]='\0';
    

    (und du mußt vermutlich ein Zeichen mehr reservieren)

    Bessere Lösung: verwende std::string



  • du meinst

    char *name= new char[a+1];
    

    und er fängt ja bei null(b) an,aber das pRogramm strürzt immer ab,wenn ich mit einem || die leerzeichen berücksichtige...



  • oh achso,ich hab schon lange nicht mehr programmiert,jetzt geht's!



  • ncoh was,wie kann ich zeilenwese,also mit zeilenumbruch in eine datei schreiben?



  • Ganz normal 😉 Zeilenumbrücher erhältst du, indem du '\n' schreibst (oder ein endl an einen Stream übergibst).


Log in to reply