2016-09-04 1 views
3

Je crée un programme qui accepte un nombre, puis analyse un fichier pour retourner le nom associé à ce numéro. C'est presque terminé, mais il n'y a qu'un dernier pas. À l'heure actuelle, mon programme trouve correctement la ligne associée au nombre donné en vérifiant le premier jeton de chaque ligne. Voici un extrait du code qui importe:Obtention du dernier jeton de strtok

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

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

En ce moment, il imprime juste le premier jeton, ce qui est génial parce que cela signifie qu'il a trouvé la ligne droite. Cependant, j'en ai besoin pour imprimer le jeton dernier, mais je n'arrive pas à comprendre comment le faire avec strtok(). Est-ce que quelqu'un peut m'aider?

+2

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

Répondre

2

Une fois que vous avez trouvé la ligne souhaitée, appelez strtok avec NULL pour le premier paramètre, mais gardez une trace de la valeur de retour précédente. Une fois strtok retourne NULL, le pointeur sur les points de jeton précédent au dernier:

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; 
    } 

Contenu de /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 

Sortie avec l'argument "6":

6: 
last: floppy