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 }

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

    输出结果截图

  • 相关阅读:
    nandflash 分区相关
    android 动态渐变 字符效果
    《Java是如何快速煮成C#的?》(二):数据访问(1)
    01总体分布下的参数假设检验示例一
    《Java是如何快速煮成C#的?》(一):相似的方法(2)
    SQL Server 2008中SQL之WaitFor
    IIS进程经常崩溃的三个解决思路
    Trace.axdasp.net调试的新境界
    ClickOnce发布时报错:Cannot publish because a project failed to build
    《活法》中一个故事--令托尔斯泰也折服的人性寓言
  • 原文地址:https://www.cnblogs.com/shenbaishan/p/5846954.html
Copyright © 2011-2022 走看看