用C编程计算文本文件中给定单词的频率

Program in C to count the frequency of a given word in a text file

用 C 编写的程序计算文本文件中给定单词的频率

我制作这个程序的目的是计算文本文件中给定单词的频率,但计算字符数。

需要帮助来修复它。

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

int main()
{
  FILE * fptr;
  char ch, * word, * a;
  int i=0, p=0;

  word =(char *) malloc(25 * sizeof(char));
  fptr = fopen("text.txt", "r");

  if (!fptr)
  {
    printf("File not found. \n");
  }
  else
  {
    printf("Word: ");
    scanf("%s", word);

    while(word[p]!='[=10=]')
    {
      p++;
    }

    a=(char *) malloc(p * sizeof(char));

    while (*(ch+a) != EOF)
    {
      *(ch+a) = getc(fptr);

      if (*(ch+a) == * word)
      {
        i++;
      }
    }
  }  
  if (i==0)
    printf("Word not found.\n");
  else
  {
    printf("Word found %d times.\n",i);
  }

  fclose(fptr);
  return 0;
}

您的代码中的错误是 getc() 只将一个字符存入内存。所以你不能做这个 *(ch+a) == * word 因为 ch 的值不是 地址 。 let ch='x' 和 let a=10 so *(ch+a)==*('x'+10) 这将取消对您未分配的地址的引用。

This 网站实现了 countOccurancees 函数,它接受一个指向 const char 的指针和一个文件指针以及 return 单词出现的次数。

strstr() 通过 return 指向所定位子字符串开头的指针来帮助找到单词的第一次出现。

#define BUFFER_SIZE 100
int countOccurrences(FILE *fptr, const char *word)
{
  char str[BUFFER_SIZE];
  char *pos;

  int index, count;

  count = 0;

  // Read line from file till end of file.
  while ((fgets(str, BUFFER_SIZE, fptr)) != NULL)
    {
      index = 0;

      // Find next occurrence of word in str
      while ((pos = strstr(str + index, word)) != NULL)
        {
      // Index of word in str is
      // Memory address of pos - memory
      // address of str.
      index = (pos - str) + 1;

      count++;
        }
    }

  return count;
}

所以在 main 函数中只需要 i=countOccurrences(fptr, word);

main 应该看起来像

int main()
{
  FILE * fptr;
  char  * word;
  int i=0;

  word = malloc(25 * sizeof(char));//Do NOT cast
  fptr = fopen("text.txt", "r");

  if (!fptr)
    printf("File not found. \n");

  else
  {
    printf("Word: ");
    scanf("%s", word);
    i=countOccurrences(fptr, word);
  }  
  if (i==0)
    printf("Word not found.\n");
  else
    printf("Word found %d times.\n",i);

  fclose(fptr);
  return 0;
}