得到strtok的最后一个标记

时间:2016-09-04 22:10:19

标签: c strtok

我正在创建一个接受数字的程序,然后解析一个文件以返回与该数字相关联的名称。它主要完成,但只有最后一步。现在,我的程序通过检查每一行的第一个标记正确地找到与给定数字相关联的行。这是重要代码的片段:

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

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

现在它只打印第一个令牌,这很棒,因为这意味着它找到了正确的行。但是,我需要它来打印 last 令牌,但我无法弄清楚如何使用strtok()执行此操作。有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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