2016-09-04 4 views
3

Я делаю программу, которая принимает число, а затем анализирует файл, чтобы вернуть имя, связанное с этим номером. Это в основном сделано, но есть только один последний шаг. Прямо сейчас моя программа правильно находит строку, связанную с данным номером, проверяя первый токен каждой строки. Вот фрагмент кода, который имеет значение:Получение последнего токена strtok

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

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

Сейчас он просто печатает первый маркер, который является большим, потому что это означает, что он нашел правильную линию. Однако мне нужно распечатать последний токен, но я не могу понять, как это сделать с помощью strtok(). Может ли кто-нибудь помочь мне?

+2

Дубликат вопрос : http://stackoverflow.com/questions/32822988/get-the-last-token-of-a-string-in-c – Saskia

ответ

2

Как только вы найдете нужную строку, продолжайте звонить strtok с помощью NULL для первого параметра, но отслеживайте, каково было предыдущее возвращаемое значение. После того, как strtok возвращает NULL, указатель на предыдущих пунктов лексем до последнего:

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

Содержание /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 

Выход с аргументом "6":

6: 
last: floppy