计算C中文本文件中单词的出现次数

时间:2014-01-13 19:32:06

标签: c

以下代码旨在从用户选择的文本文件中查找单词“if”的出现次数,但退出循环后的结果始终为0.问题是如何修复它。

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main() {
    FILE * f;
    int count = 0, i;
    char buf[50], read[100];
    printf("Which file to open\n");
    fgets(buf, 50, stdin);
    buf[strlen(buf) - 1] = '\0';
    if (!(f = fopen(buf, "rt"))) {
        printf("Wrong file name");
    } else printf("File opened successfully\n");
    for (i = 0; fgets(read, 100, f) != NULL; i++) {
        if (read[i] == 'if') count++;
    }
    printf("Result is %d", count);
    getch();
    return 0;
}

3 个答案:

答案 0 :(得分:3)

  1. 'if'不是您认为的;它是一个多字符文字,而不是字符串。

  2. 您无法将字符串与C中的==进行比较。使用strcmp(3)

  3. 你的循环看起来不像你想要的那样;是时候打破调试器了(可能是strtok(3))。

答案 1 :(得分:2)

你的测试是错误的。

if (read[i]=='if') /* no */

使用strcmp

if (strcmp(read[i], "if") == 0) /* check if the strings are equal */

答案 2 :(得分:0)

首先,read[i]只包含一个字符,永远不会等于任何多字符字。

另一方面,单撇号用于定义单个字符。 'if'不是一串字符。

您需要解析每一行以查找每个单词,然后使用类似stricmp()的内容将每个单词与目标单词进行比较。