c - 获取 strtok 的最后一个标记

标签 c strtok

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

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

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

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

最佳答案

一旦找到所需的行,继续调用 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

关于c - 获取 strtok 的最后一个标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39321930/

相关文章:

c - 在 C 中使用 Strtok 获取字符串

C - 读取和解析方法未获得第二行输入

c - 丢弃距离测量中的失控值

c - 隐藏的全局变量是不好的编程习惯吗?

php - 平行于PHP的 "explode"in C : Split char* into char* using delimiter

c++ - 尝试将 'strtok' 用于字符串时出错

c - Arm Cortex架构中的局部变量是存储在寄存器还是堆栈中?

c++ - ghdl 缺少 util.misc_conv_pkg ubuntu 14.04

c - 在 C 中将 char* 前缀添加到现有 char* 的最佳方法

c - 获取 C 中字符串的最后一个标记