1

我想使用子字符串来计算输入特定单词的次数。我一直在玩我的代码,看看我是否可以让它工作,但我就是不明白!

我的代码如下:

#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了,但这不起作用。

4

2 回答 2

2

如果您要查找多个令牌实例,则需要多次调用 strtok。在随后的调用中,传入 NULL 作为第一个参数。请参阅手册页

此外,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”开头

于 2012-12-11T17:08:33.543 回答
0
while(sizeof(t) > j)

sizeof告诉您类型的大小,因此在您的情况下,它是sizeof(char*),它只是您平台上指针的大小。很可能它总是 4 或 8。将其替换为strlen,它旨在告诉您字符串的大小。

于 2012-12-11T17:08:24.317 回答