在文件中搜索单词并添加计数

时间:2018-10-16 22:54:37

标签: c file

我试图在文件中搜索单词,并在每次出现在文本中时将其添加到计数器变量中。在我的研究中,我无法找到有效的解决方案。这是我到目前为止使用的代码块。 N是代码中较早使用的变量,用于存储来自用户的输入(程序打印带有多个选项的菜单,搜索是列表中的第一项)。我检查了文件是否已正确打开,但是当我尝试执行此块时,出现了缓冲区!= nullptr的错误。有人看到这个问题吗?

if (strcmp(n, "S") == 0) {
            char search_word = NULL;
            printf("What word would you like to search for?");
            scanf("%s", search_word);
            while(fgets(str, sizeof(str), fp)){
                if ((strstr(str, search_word)) != NULL)
                    i++;
            }
            printf("Your word appears %d times.", &i);
        }

2 个答案:

答案 0 :(得分:3)

您可以使用fget代替scanf

您需要循环显示一条线

#include <stdio.h>
#include <string.h>

int main() {
    char search_word[100];
    printf("What word would you like to search for?");
    gets(search_word);    // change scanf to gets

    char line[1024];
    int i = 0;
    while (fgets(line, sizeof(line), fp)) {
        char* found = line;

        // After getting a line of characters, loop to find search_word and
        // go to found empty
        while ((found = strstr(found, search_word)) != NULL) {
            i++;
            found++;    // move found to next char
        }
    }

    printf("Your word appears %d times.", i);

    return 0;
}

答案 1 :(得分:1)

我可以看到的第一个潜在问题是scanf中使用的变量,您正在尝试将char数组放入char中,因此,不要使用char search_word,而是使用{{1 }}这样,您就可以读取最多32个字符的char数组。还有另一个问题是使用strstr时,该函数会在字符串中首次找到该单词时返回该词,这意味着如果您使用的是char search_word[32];之类的字符串,而您使用的是{{1} }函数来搜索单词"Hello my name is Jeff. is ...",该函数的返回值是指向strstr的指针,因此您需要使用返回值直到获得空返回值,然后移至下一行。