我有一个搜索功能,我知道这是问题所在,但似乎无法解决。
我正在使用该功能在子进程中进行搜索。

这是我正在使用的测试文件


  key2计算机科学副教授Patrick Eugster因其项目Geo-Distributed Big Data Processing(与博士合作)而获得了key2 Google赞助的研究奖。学生Chamikara Jayalath和Julian Stephe 23456 key1 2013年2月21日,普渡大学理学院的年度教职员工奖计划认可了几位计算机科学系教职员工。key2普渡大学认可了几位计算机科学教职员工理学院的年度教师关键员工奖励计划于2013年2月21日进行。key1 key1 key1普渡大学认可的几位计算机科学教师和员工


我应该得到结果

key1: 4
key2: 3


但是我得到的结果是

key1: 4
key2: 1


我要去哪里错了?

这是代码:

int search(FILE *file, char *key, int bufferSize, long int start)
{
    int wordCtr = 0;
    int buffer = 0;
    if ( file != NULL )
    {
        printf("test 1 at position %ld in file\n", ftell(file));
        fseek(file, start, SEEK_SET);
        int ch, word = 0;
        char currentWord[MAX_WORD_LEN];
        int i = 0;
        int counter = 0;
        while ((ch = fgetc(file)) != EOF && counter < MAX_BUFFER_SIZE-1)
        {
            counter++;
            if (isspace(ch)|| ch =='\n' || ch =='\t' && (buffer++ < bufferSize))
            {
                if(word)
                {
                    word = 0;
                    currentWord[i++] = '\0';
                    i = 0;
                    if(!strcmp(currentWord, key))
                    {
                        wordCtr++;
                    }
                }
            }
            else
            {
                word = 1;
                currentWord[i++]=ch;
            }
        }
    }
    return wordCtr;
}


请让我知道是否需要更多代码。

最佳答案

我没有遵循您所有的代码,但是可能是这样的:

if (isspace(ch)|| ch =='\n' || ch =='\t' && (buffer++ < bufferSize))


测试ch =='\t' && (buffer++ < bufferSize)捆绑在一起。那真的是你想要的吗?我想你是说

if ((isspace(ch)|| ch =='\n' || ch =='\t') && (buffer++ < bufferSize))

关于c - 搜索功能返回错误计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16257073/

10-15 07:17