zoukankan      html  css  js  c++  java
  • 作业之词频统计

     项目需求:

    1编一程序,统计一篇英文文章中各单词出现的次数。

    2输入:英文文章,为文本文件,扩展名.txt

    3输出:按次数降序排列

    设计如下。

     1 #pragma warning (disable:4996)
     2 #include <iostream>
     3 #include <map>
     4 #include <vector>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 class String
    10 {
    11 public:
    12                                            //初始化词频初始值为1
    13     String(char *Word) :Frequency(1)
    14     {
    15                                                      //存放单词的数组
    16         Word_Point = new char[strlen(Word) + 1];
    17                                                                 //将word复制到Word_Point数组
    18         strcpy(Word_Point ,Word);
    19     }
    20     char *Word_Point;
    21                                                                 //声明词频变量
    22     int Frequency;
    23     
    24     bool operator<(String STR);
    25     ~String(){}
    26 };
    27                                                                //重载函数
    28                                                                //可实现词频的降序输出
    29 bool String::operator<(String STR){    return Frequency > STR.Frequency;}
    30 
    31 vector<String>  Sort_Word;
    32 
    33                                                                //匹配到相同的词汇,词频数加1
    34 void If_Repet(char *WordP)
    35 {
    36     vector<String>::iterator iter;
    37     for (iter = Sort_Word.begin(); iter != Sort_Word.end() ;iter++)
    38         if (!strcmp(iter->Word_Point, WordP))
    39         {
    40             iter->Frequency++;
    41             return;
    42         }
    43     Sort_Word.push_back(String(WordP));
    44 }
    45                                                                //读取article.txt文档,进行单词的分词
    46 void Catch_Letter(void)
    47 {
    48                                                                //动态分配内存
    49     char *Wor_Po = (char *)malloc(4);
    50                                                                //读取article.txt文档
    51     FILE *Article = fopen("E://aa.txt", "r");
    52     char *Letter_Point;
    53                                                                //进行单词的分词
    54     while (!feof(Article))
    55     {
    56         fscanf(Article, "%s", Wor_Po);
    57         Letter_Point = Wor_Po;
    58         while (*Letter_Point++)
    59         {
    60             if (*Letter_Point == ',' || *Letter_Point == '.')
    61                 *Letter_Point = 0;
    62         }
    63         If_Repet(Wor_Po);
    64     }
    65 }
    66 
    67 void main(void)
    68 {
    69                                                                   //调用Catch_Letter() 函数
    70     Catch_Letter();
    71                                                                    //sort函数,将起,终点范围内的区域进行排序,默认升序输出
    72     sort(Sort_Word.begin() ,Sort_Word.end());
    73                                                                   //完成输出动作
    74     for (vector<String>::iterator iter = Sort_Word.begin(); iter != Sort_Word.end(); iter++)
    75     {
    76         printf("Word : %-15s Frequency :%d
    ", iter->Word_Point, iter->Frequency);
    77         
    78     }
    79     getchar();
    80 }

    输入文件截图       看老师说要篇幅大的,于是加了一个英文散文?随便网上找的

    输出结果截图

  • 相关阅读:
    删除List集合中的元素你碰到过这样的陷阱吗?
    从spring框架中的事件驱动模型出发,优化实际应用开发代码
    SpringBoot启动原理及相关流程
    基于SpringBoot实现定时任务的设置(常用:定时清理数据库)
    C#开发中常用的加密解密方法
    http://go.microsoft.com/fwlink/?linkid问题
    移动端开发必须知道的小技巧
    工作中遇到的细节问题总结(二)
    redis分布式锁和消息队列
    join和wait
  • 原文地址:https://www.cnblogs.com/shenbaishan/p/5846954.html
Copyright © 2011-2022 走看看