【问题标题】:Getting last token of strtok获取 strtok 的最后一个令牌
【发布时间】:2016-09-04 22:10:19
【问题描述】:

我正在制作一个程序,它接受一个数字,然后解析 a 文件以返回与该数字关联的名称。大部分都完成了,但只有最后一步。现在,我的程序通过检查每一行的第一个标记正确地找到了与给定数字关联的行。这是重要代码的 sn-p:

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

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

现在它只打印第一个标记,这很好,因为这意味着它找到了正确的行。但是,我需要它来打印 last 令牌,但我不知道如何使用 strtok() 来做到这一点。有人可以帮帮我吗?

【问题讨论】:

标签: c strtok


【解决方案1】:

一旦你找到你想要的那行,继续调用strtokNULL 作为第一个参数,但要跟踪之前的返回值是什么。一旦strtok返回NULL,指向前一个token的指针就指向最后一个:

  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

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2020-06-22
    相关资源
    最近更新 更多