• 词频统计


    一、目标

         *开发工具:CodeBlocks

        *开发语言:C++

        *源代码管理Github链接:https://github.com/Snoopyjinjin/cipin

    二、要求

        实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。

        附加要求:读入一段文本文件,统计该文本文件中单词的频率。

    三、思路分析

         一个单词的结束是以非字母的形式结尾,所以应把单词分开。创建数组用来存储单词字符,并从磁盘中导入含有英文单词的文本文档。在这里,我本来打算是直接从键盘上输入一长串字符的,如老师示例给的单词数较少,直接键入也行,但如果单词数较多,直接键入容易出错,也比较浪费时间,所以宜把它存入文本文档再进行读取。后来我在附加条件中也看到了该要求。

        原本预计完成这次作业需要一下午的时间,但天不遂人愿,我用了一下午加一晚上的时间才完成。哎,果然能力捉急呀/(ㄒoㄒ)/~~

    四、源码

    #include <iostream>
    #include <cstring>
    #include <fstream>
    using namespace std;
    
    typedef struct word
    {
     int count;
     char word[WORD_LEN];
    }
    
    struct Stack
    {
     Word wd[1000];
     int count;
    
     void push(char* word)
     {
      for(int i=0;i<count;i++)
      {
       if(strcmp(wd[i].word,word)==0)
        return;
      }
      wd[count].word=word;
      wd[count].ref=1;
      count++;
     }
     void main()
    {
     Stack st;
     st.count=0;
     fstream ("G:\英文.txt","r");
     char* buf=(char*)malloc(10000);
     int len=fread(buf,1,10000,fa);
     char* word=buf;
     //全部转为小写
     for(int i=0;i<len;i++)
     {
      if(buf[i]>='A' && buf[i]<='Z')
       buf[i]+='a'-'A';
     }
     for(i=0;i<len;i++)
     {
      if(buf[i]<'a' || buf[i]>'z')
      {
       buf[i]='';
       st.push(word);
       while(buf[i]<'a' || buf[i]>'z')
        i++;
       word=&buf[i];
      }
     }
     in.close();
    }

    五、调试与检验

     

    上图是老师给的示例的运行情况,下面是导入一段较长文本的运行结果,果然,直接导入文件远比键盘键入来的快捷的多,毕竟单词多嘛。

    检验看程序运行的对不对,就看它统计的字数对不对啦。若是单词数少的话,还可以通过数数解决,若多的话就不行了。我把文本导入word,用工具栏里的查找功能进行检验,看每个单词统计的对否;还有一种就是在工具栏的宏里边设置参数调试,不过这个有点复杂,我后来就没做。当然了,后一种高大上的方法是我百度查来的。

    六、作业总结

          通过这个词频统计的小程序,我掌握了基本的分割单词的能力,再一次巩固了C++。另外,在设计时,我也明白了“化繁为简”的重要性,比如:用文本文件导入单词就远比直接键入来的简易的多。所以在以后的编程时,遇到复杂的地方,我也许可以试着换一个角度试试。最后,对于我们常用的一些工具软件,应多多熟悉它的性能,不然等到用时就手忙脚乱了。

        

  • 相关阅读:
    C
    B
    D
    I
    B
    E
    B
    L
    H
    bzoj3276磁力 两种要求下的最大值:分块or线段树+拓扑
  • 原文地址:https://www.cnblogs.com/jiangjinjin/p/5281005.html
Copyright © 2020-2023  润新知