我想使用子字符串来计算输入特定单词的次数。我一直在玩我的代码,看看我是否可以使它工作但我只是不明白!
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i=0;
char buf[1026]={'\0'};
char *p="#EOF\n";
char *t;
while (strcmp(buf, p) != 0)
{
fgets(buf, 1025, stdin);
t=strtok(buf," , - \n");
while(t != NULL)
{
if(strncmp(t, argv[1], strlen(argv[1])) == 0)
{
i++;
}
}
}
printf("%d\n", i);
return 0;
}
没有错误,但i
的值始终为0.我不知道如何确保它在找到单词之后继续计数。我尝试了sizeof(t) < j
,但这不起作用。
答案 0 :(得分:2)
如果您要查找多个令牌实例,则需要多次调用strtok。在后续调用中,传入NULL作为第一个参数。请参阅man page
此外,sizeof(t)是一个常量,可能是4或8.t是一个char指针,它占用了一些字节数。如果你想看看strtok是否返回了你想要与NULL进行比较的东西。从手册页:
返回值
The strtok() and strtok_r() functions return a pointer to the next token, or NULL if there are no more tokens.
您要检查NULL以确定该行上没有其他标记。
另请注意,如果令牌桥接两个读取,您将无法获得它。例如,第1行以“,”结尾,下一个以“ - \ n”开头
答案 1 :(得分:0)