lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Ich möchte einen String anhand bestimmter Zeichen teilen und die Teile dann nochmal anhand eines anderen Zeichen teilen.

char str[] = "car_yellow;motorbike_blue;bicycle_green;car_blue";

char *tok = strtok(str, ";");

while(NULL != tok) {

    printf("Eintrag: %s\n", tok);
    
    char *tok2 = strtok(tok, "_");
    
    printf("%s : ", tok2);
    
    tok2 = strtok(NULL, "");
    
    printf("%s\n", tok2);
    
    tok = strtok(NULL, ";");
    
    if(NULL == tok)
        break;
    
}

Das Ergebnis ist aber ganz komisch und zeigt nur den ersten Eintrag.

Eintrag: car_yellow 
car : yellow
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Die Funktion strtok verwendet intern einen statischen Zeiger, um den Fortschritt beim Durchlaufen des Strings zu verfolgen. Wenn du strtok erneut auf denselben String anwendest setzt sie den internen Zeiger zurück und beginnt wieder von vorne. Das erklärt, warum nur der erste Eintrag angezeigt wird.  Du kannst z.B strchr in der inneren Schleife verwenden, um "_" in tok zu finden und dann den String an der Position aufteilen.

char str[] = "car_yellow;motorbike_blue;bicycle_green;car_blue";

char *tok = strtok(str, ";");

while (tok != NULL) {
    printf("Eintrag: %s\n", tok);
    
    char *underscore_pos = strchr(tok, '_');
    
    if (underscore_pos != NULL) {
        *underscore_pos = '\0'; // Setze das Unterstrichzeichen auf '\0', um den String zu teilen
        printf("%s : %s\n", tok, underscore_pos + 1);
    }
    
    tok = strtok(NULL, ";");
}
von  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

261 Kommentare

13 Nutzer