C Word出现

时间:2013-12-17 15:29:43

标签: c

我已经仔细阅读了所有相关问题,以量化文本文件中单词的出现,我仍然无法执行此操作并对单词进行计数。我没有收到错误,但返回的输出是:

文件已打开 字符数= 0 4195872

“file.txt”中有6个单词“CORRESPONDENCE”,我只需要计数器返回值6.任何帮助都会非常感激。

   #include <stdio.h>
   #include <stdlib.h>

    int main(){

    int counter;
    int ch;
    int str;

    FILE *input;
    input = fopen ("file.txt", "r");

    if (input == NULL)
    {
            printf("File failed to open \n");
    }
    else
    {
            printf("File opened \n");
            do {
                    str = fgetc(input);
                    //      if ((char*)str == keyword) counter++;                              
                    if (str == ch)counter++;
                    } while (str != EOF);

            printf("character count = %i %i\n", counter, ch );
                            fclose(input);
                }
         return 0;
     }

2 个答案:

答案 0 :(得分:1)

您没有初始化ch和计数器变量。所以他们可以有任何令人惊讶的价值观。 因此,获得结果4194872并不奇怪。

您犯的另一个严重错误是您的程序实际上从未计算“对应”一词的出现次数。在你的程序中,变量str只能表示一个字母,但不能表示单词。因此,当您使用str == ch来测试是否存在“对应”一词时,您实际上是在测试字母是否等于c。(只有当您拥有时才会这样)正确初始化了str变量。为清楚起见,最好将str声明为char类型而不是int类型。)

比较单词之间的正确方法是逐个比较它们的字母。如果任何字母不合适,则返回false。

阅读此代码以了解比较过程。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{

    FILE * file = fopen("file.txt","r");
    if(file == NULL) {printf("File not open"); return -1;}
    char* str ="correspondence"; //Declare str as an array and initiate it with your word
    char input[50];  //Declare an char array long enough to hold ordinary words
    int i;
    int count = 0;
    while(fscanf(file,"%s",input) != EOF)
    {
            for(i = 0;i < strlen(str) && i < strlen(input) ;++ i)
            {
                    if(input[i] != str[i])  break;
                    else  i++;
            }
            if(i >= strlen(str) && strlen(str) == strlen(input))
            count++;
            memset(input,0,sizeof(input));
    }

    printf("word count = %d",count);

    return 0;
}

答案 1 :(得分:1)

您需要在比较之前初始化ch。