C C: Arbeitsweise strtok

Fasko

Lt. Junior Grade
Registriert
Jan. 2011
Beiträge
478
Hi,

momentan sitze ich an einer Aufgabe dran, zu der strtok gehört.
Bzw. ich versuche die Musterlösung zu verstehen(siehe Kommentare und Zwischenausgabe).

Wie genau arbeitet der folgende Punkt innerhalb der while-Schleife.

// naechsten Abschnitt erstellen
ptr = strtok(NULL, delimiter);

Ich verstehe nicht, warum er jeweils einen Schritt weiter geht mit seiner Ausgabe.
Was genau passiert an dieser Stelle?

Gruß
Fasko

Code:

Code:
//
//  main.c
//  Aufgabe-08.07
    //
    //

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char string[] = "Paris 111,Berlin 6,London 16,Rom 28";
    char delimiter[] = ",";
    char *ptr;
    
    char spanset[] = "1234567890"; // später für strcpn notwendig
    int sum = 0;
    
    // initialisieren und ersten Abschnitt erstellen
    ptr = strtok(string, delimiter);
    printf("Ausgabe PTR nach der Definition: %s\n", ptr);
    
    
    
    // Start While Schleife
    while(ptr != NULL) {
        
        printf("Abschnitt gefunden: %s\n", ptr);
        
        // strspn ermittelt die Länge der Zeichen in einem String, bis zum gesuchten Zeichen.
        int len = strcspn(ptr, spanset);
        ptr+=len;
        
        //ptr = strrchr(ptr, ' ');
        //ptr++;
        
        printf("Zahl: %s\n", ptr);
        sum+= atoi(ptr);
        
        // naechsten Abschnitt erstellen
        ptr = strtok(NULL, delimiter);
        printf("Ausgabe PTR: %s\n", ptr);
        
    } // Ende While Schleife
    
    printf("Die Summe lautet: %i\n", sum);
    

    return 0;
}


Ausgabe:

Ausgabe PTR nach der Definition: Paris 111
Abschnitt gefunden: Paris 111
Zahl: 111
Ausgabe PTR: Berlin 6
Abschnitt gefunden: Berlin 6
Zahl: 6
Ausgabe PTR: London 16
Abschnitt gefunden: London 16
Zahl: 16
Ausgabe PTR: Rom 28
Abschnitt gefunden: Rom 28
Zahl: 28
Ausgabe PTR: (null)
Die Summe lautet: 161
Program ended with exit code: 0
 
http://www.cplusplus.com/reference/cstring/strtok/ schrieb:
To determine the beginning and the end of a token, the function first scans from the starting location for the first character not contained in delimiters (which becomes the beginning of the token). And then scans starting from this beginning of the token for the first character contained in delimiters, which becomes the end of the token. The scan also stops if the terminating null character is found.

This end of the token is automatically replaced by a null-character, and the beginning of the token is returned by the function.
strtok arbeitet von der Stelle, die beim letzten Aufruf gespeichert wurde, weiter, wenn die Funktion mit NULL aufgerufen wird.

Die Funktion läuft durch den String, sucht nach dem Trennzeichen, ersetzt es durch \0 und gibt dann einen Pointer zum Anfang des Abschnitts zurück. Außerdem wird auf nicht näher spezifizierte Weise ein Pointer auf das Zeichen danach gespeichert. Dieser dient beim nächsten Aufruf mit NULL als neue Startadresse.
 

Ähnliche Themen

Zurück
Oben