我正在创建一个接受数字的程序,然后解析一个文件以返回与该数字相关联的名称。它主要完成,但只有最后一步。现在,我的程序通过检查每一行的第一个标记正确地找到与给定数字相关联的行。这是重要代码的片段:
while (fgets(line, 50, f)) {
tok = strtok(line, " ");
if (n == atoi(tok))
{
printf(" %s\n", tok);
return 0;
}
}
现在它只打印第一个令牌,这很棒,因为这意味着它找到了正确的行。但是,我需要它来打印 last 令牌,但我无法弄清楚如何使用strtok()
执行此操作。有人可以帮助我吗?
答案 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