不会写code 2022-09-26 23:52 采纳率: 76.5%
浏览 83
已结题

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

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

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

  • 写回答

2条回答 默认 最新

  • _GX_ 2022-09-27 00:11
    关注
    #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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 白驹_过隙 算法领域新星创作者 2022-09-27 08:23
    关注

    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;
    }
    
    
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 创建了问题 9月26日

悬赏问题

  • ¥15 欧姆龙PLC 电机控制 限位
  • ¥30 如何处理shell命令接收到的视频流并实时播放出来
  • ¥15 虚心请教C#的代码优化问题
  • ¥15 有偿求做台风过境全过程模拟仿真
  • ¥50 求!AutomationDesk 如何自动导入Variant数据
  • ¥20 Next.JS 静态导出路由
  • ¥15 我做一个对中文文本情感分析的项目 我用了CNN,和keras框架 报的错误我一直处理不好
  • ¥15 unity使用bakery打光烘焙所遇到的问题。
  • ¥99 二维有限元方法求解,泊松方程
  • ¥35 我需要在PC端 开两个抖店工作台客户端.(语言-java)