首页 > 解决方案 > 交流计数器的实现

问题描述

我编写了 ac 程序来计算单词“printf”在特定文件(此处为“document.c”)中出现的次数。“document.c”有多行代码。我所做的是我从一个while循环开始迭代文件的每一行,然后我使用函数strstr读取for循环内每一行的字符。

它不会用我当前的代码打印任何内容。此外,我认为还有一些其他小问题,因为在旧版本中它曾经打印但不正确,它打印的数字比文档中“printf”的实际数字大得多。

我也是c的新手。谢谢!

int counter() {
    FILE * filePointer;
    filePointer = fopen("document.c", "r");
    int counter = 0;
    char singleLine[200];

    while(!feof(filePointer)){
        fgets(singleLine, 200, filePointer);
        for (int i = 0; i < strlen(singleLine); i++){
            if(strstr(singleLine, "printf")){
                counter++;
            }
        }
    }
    fclose(filePointer);
    printf("%d",counter);
    return 0;
}

标签: c

解决方案


您正在遍历输入行中的每个字符,然后询问字符串“printf”是否出现在该行的任何位置。如果该行包含 5 个字符,您将询问 5 次;如果它包含 40 个字符,你会问这个 40 次。

假设您试图涵盖“printf”可以在该行上出现多次的情况,请查看strstr()返回的内容,并使用它来调整内部循环中搜索的起始位置(应该t 遍历每个字符,但应该在找到新的“命中”时循环)。

(注意投票者:我正在回答这个问题,但没有提供代码,因为我不想为他们做作业。)


推荐阅读