2016-09-04 4 views
3

Ich mache ein Programm, das eine Zahl akzeptiert und analysiert dann die a-Datei, um den Namen zurückzugeben, der dieser Nummer zugeordnet ist. Es ist meistens fertig, aber es gibt nur einen letzten Schritt. Im Moment findet mein Programm die Zeile, die der angegebenen Nummer zugeordnet ist, korrekt, indem es das erste Token jeder Zeile überprüft. Hier ist ein Ausschnitt des Codes, der zählt:Das letzte Token von strtok erhalten

while (fgets(line, 50, f)) { 
     tok = strtok(line, " "); 

     if (n == atoi(tok)) 
     { 
      printf(" %s\n", tok); 
      return 0; 
     } 
    } 

Gerade jetzt druckt er nur das erste Token, das ist toll, weil das bedeutet es, die richtige Linie gefunden. Allerdings brauche ich es, um die letzten Token zu drucken, aber ich kann nicht herausfinden, wie man das mit strtok(). Könnte mir jemand helfen?

+2

Duplizieren Frage : http://stackoverflow.com/questions/32822988/get-the-last-token-of-a-string-in-c – Saskia

Antwort

2

Sobald Sie die gewünschte Zeile gefunden haben, rufen Sie für den ersten Parameter strtok mit NULL auf, aber behalten Sie den früheren Rückgabewert im Auge. Sobald strtok gibt NULL zurück, der Zeiger auf den vorangegangenen Token zeigt auf das letzte:

if (number == atoi(token)) { 
     char *prev = token; 
     printf(" %s\n", token); 
     while ((token=strtok(NULL," ")) != NULL) { 
     printf(" %s\n", token); 
     prev = token; 
     } 
     printf("last: %s\n", prev); 
     return 0; 
    } 

Inhalt von /proc/interrupts:

  CPU0  
    0: 723903927 IO-APIC-edge timer 
    1:  10105 IO-APIC-edge i8042 
    6:   5 IO-APIC-edge floppy 
    7:   0 IO-APIC-edge parport0 
    8:   1 IO-APIC-edge rtc 
    9:   0 IO-APIC-level acpi 
12:  24023 IO-APIC-edge i8042 
14:  221198 IO-APIC-edge ide0 
15: 6473219 IO-APIC-edge ide1 
169:  637825 IO-APIC-level eth0 

Ausgang mit dem Argument "6":

6: 
last: floppy 
Verwandte Themen