C语言阅读txt文件并计算单词数量

编写一个函数在终端中用 ./a.out 其中data.txt文件为
My
name
is
iKun
And
my
favorite
sport
is
basketball
and
if
you
love
me
you
should
become
IKUN

统计一共有多少个不同的单词(大小写算不同的单词)
同时统计出现频率最多的单词是多少次,并且打印出这个单词(如果有多组,那么都打印出来)

#include <stdio.h>
#include <string.h>

#define MAX_WORD_LENGTH 60
#define MAX_WORD_NUM 200

char words[MAX_WORD_NUM][MAX_WORD_LENGTH] = {0};
int count[MAX_WORD_NUM] = {0};

int main() {
  int n = 0, max = 0;
  char word[MAX_WORD_LENGTH];
  while (scanf("%s", word) == 1) {
    int i = 0;
    while (i < n && strcmp(words[i], word) != 0)
      i++;
    if (i == n) {
      strcpy(words[i], word);
      n++;
    }
    count[i]++;
    if (count[i] > max)
      max = count[i];
  }
  printf("Total number of different words: %d\n", n);
  printf("Max Freq: %d\n", max);
  for (int i = 0; i < n; i++) {
    if (count[i] == max)
      printf("%s\n", words[i]);
  }
  return 0;
}
$ gcc -Wall main.c
$ ./a.out < data.txt
Total number of different words: 17
Max Freq: 2
is
you

img


#include<stdio.h>
#include<ctype.h>
#include<string.h>
typedef struct Word{
    char s[20];
    int num;
} Word;           //s存储一个单词,num表示单词个数("单词表成员")
int main()
{
    char ch;
    int wordStart=0,numberofword=0,max=0;   //numberofword单词总数
    Word word[200];       //可以存储不同单词以及其个数的"单词表"
    int i=0,j=0,k,m=0;
    char copy[20]="";     //暂存读取的一个完整单词

    FILE *fp1=NULL;
    FILE *fp2=NULL;
    fp1=fopen("data.txt","r");   //只读方式打开文件
    for (j = 0; j < 200; j++)
    {
        word[j].num=0;           //把结构体数组成员的num全部赋值为0
    }

    while(!feof(fp1))         //循环读取直到文件末尾
    {

        ch =fgetc(fp1);
        if( isalpha(ch)) //单词开始
        {
            wordStart = 1;   //标记
            copy[i++]=ch;      //把一个完整单词每个字符依次存进copy
        }
        else if( !isalpha(ch) && wordStart==1 )  //判断一个单词结束
        {
            numberofword++;   //单词总个数+1
            wordStart = 0;
            i=0;
            for(j=0;j<(m+1);j++)
            {
                if(!strcmp(word[j].s,copy))
                {
                    k=0;  //标志前面出现过
                    word[j].num++;   //相同单词计数+1
                    break;
                }
                else
                    k=1;
            }

            if(k==1)  //标志未出现过的新单词
            {
                for(j=0;j<20;j++)   //将新单词加如"单词表"
                {
                    word[m].s[j]=copy[j];
                }
                word[m].num++;
                m++;  //单词表成员个数+1,同时也是下一成员的下标。
            }
            for (j = 0; j < 20; j++)  //一个单词结束,copy清空
            {
                copy[j]=NULL;
            }
        }
    }
    for (j = 0; j < m; j++)
    {
        if(word[j].num>max)
        max=word[j].num;
    }
    printf("不同的单词个数:%d\n",m);
    printf("最多单词个数:%d\n",max);
    for (j = 0; j < m; j++)
    {
        if(max==word[j].num)
        puts(word[j].s);
    }
    return 0;
}