gpt4 book ai didi

C字出现次数

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:30 24 4
gpt4 key购买 nike

我已经仔细阅读了所有相关问题来量化文本文件中某个单词的出现次数,但我仍然无法让它执行并计算单词数量。我没有收到错误,但返回的输出是:

文件已打开字符数 = 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;
}

最佳答案

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

您犯的另一个严重错误是您的程序从未真正计算过“correspondence”一词的出现次数。在你的程序中,变量 str 只能代表一个字母,不能代表单词。因此,当您使用 str == ch 来测试单词“correspondence”是否存在时,您实际上是在测试 letter 是否等于 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;
}

关于C字出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20638117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com