String teilen und struktur zuweisen
-
Hallo
Meine Struktur :struct sys { char datum[8]; char zeit[8]; };
Der String :
03.04.03;13:32:49;1200 ;39 ;27 ;21 ;1,80 ;0,30 ;3,36 ;5,00 ;11,89 ;0,00 ;0,00 ;876 ;4383 ;0 ;5,00 ;
mein Ansatzcode (bitte nicht lustig machen ) :
int spalte = 0; // die aktuelle spalte int zzeichen = 0; // das aktuelle zeichen im string int zeichen = 0; // element-angabe, in welches das zeichen gespeichert werden soll struct sys daten; for(zzeichen = 0; zzeichen <= strlen(zeile) - 1; zzeichen++) { if(zeile[zzeichen] == ';'){spalte++;zzeichen++;zeichen = 0;} if(spalte == 0) daten.datum[zeichen] = zeile[zzeichen]; if(spalte == 1) daten.zeit[zeichen] = zeile[zzeichen]; zeichen++; }
in daten.datum müsste "03.04.03" stehen, das tut es aber nicht!Inhalt :
"03.04.0313:32:49<".Keine Ahnung, wo er das letzte Zeichen her nimmt. Kann mir jemand helfen? Bin C neuling und habe nur ein altes C Programmieren Buch.
Danke
-
die Daten stehen schon richtig da, wo sie hin sollen. Aber ich vermute mal, du willst die Werte über "cout" o.ä. ausgeben. Diese Funktionen erwarten eine mit "\0" terminierten C-String.
Hier eine "quick-and-dirty"-Lösung:
struct sys { char datum[9]; // <= geändert char zeit[9]; // <= geändert }; Der String : 03.04.03;13:32:49;1200 ;39 ;27 ;21 ;1,80 ;0,30 ;3,36 ;5,00 ;11,89 ;0,00 ;0,00 ;876 ;4383 ;0 ;5,00 ; mein Ansatzcode (bitte nicht lustig machen ) : int spalte = 0; // die aktuelle spalte int zzeichen = 0; // das aktuelle zeichen im string int zeichen = 0; // element-angabe, in welches das zeichen gespeichert werden soll struct sys daten; for(zzeichen = 0; zzeichen <= strlen(zeile) - 1; zzeichen++) { if(zeile[zzeichen] == ';'){spalte++;zzeichen++;zeichen = 0;} if(spalte == 0) { daten.datum[zeichen] = zeile[zzeichen]; daten.datum[zeichen+1]='\0'; //zugefügt } if(spalte == 1) { daten.zeit[zeichen] = zeile[zzeichen]; daten.zeit[zeichen+1]='\0'; //zugefügt } zeichen++; }
[ Dieser Beitrag wurde am 03.04.2003 um 14:22 Uhr von CodeWalker editiert. ]
-
struct sys { char datum[9]; char zeit[9]; }; strcpy( daten.datum, strtok( zeile, ';')); strcpy( daten.zeit, strtok( NULL, ';'));
Schneller ist allerdings:
memcpy( &daten, zeile, 18);
daten.datum[8] = daten.zeit[8] = '\0';
Vorausgesetzt, die Struktur ist byte-aligned![ Dieser Beitrag wurde am 03.04.2003 um 16:42 Uhr von RenéG editiert. ]