源代码下载:http://download.csdn.net/detail/nuptboyzhb/4987141

1.统计文本中汉字的频数,为后续的文本分类做基础。对于汉字的统计,需要判断读取的是否为汉字。源代码如下:

[C++ code]

  1. /*
  2. *@author:郑海波 http://blog.csdn.net/NUPTboyZHB
  3. *参考:实验室小熊
  4. *注:有删改
  5. */
  6. #pragma warning(disable:4786)
  7. #include <iostream>
  8. #include <vector>
  9. #include <fstream>
  10. #include <string>
  11. #include <map>
  12. #include <queue>
  13. #include <ctime>
  14. using namespace std;
  15. void topK(const int &K)
  16. {
  17. double t=clock();
  18. ifstream infile("test.txt");
  19. if (!infile)
  20. cout<<"can not open file"<<endl;
  21. string s="";
  22. map<string,int>wordcount;
  23. unsigned char temp[2];
  24. while(true)//国标2312
  25. {
  26. infile>>temp[0];
  27. if(infile.eof()) break;
  28. if (temp[0]>=0xB0)//GB2312下的汉字,最小是0XB0
  29. {
  30. s+=temp[0];
  31. infile>>temp[1];
  32. s+=temp[1];
  33. }
  34. else//非汉字字符不统计
  35. {
  36. s="";
  37. continue;
  38. }
  39. wordcount[s]++;
  40. s="";
  41. }
  42. cout<<"单词种类:"<<wordcount.size()<<endl;
  43. //优先队列使用小顶堆,排在前面的数量少,使用">";
  44. priority_queue< pair< int,string >,vector< pair< int,string > >,greater< pair< int,string> > > queueK;
  45. for (map<string,int>::iterator iter=wordcount.begin(); iter!=wordcount.end(); iter++)
  46. {
  47. queueK.push(make_pair(iter->second,iter->first));
  48. if(queueK.size()>K)
  49. queueK.pop();
  50. }
  51. pair<int,string>tmp;
  52. //将排在后面的数量少,排在前面的数量多
  53. priority_queue< pair< int,string >,vector< pair< int,string > >,less< pair< int,string> > > queueKless;
  54. while (!queueK.empty())
  55. {
  56. tmp=queueK.top();
  57. queueK.pop();
  58. queueKless.push(tmp);
  59. }
  60. while(!queueKless.empty())
  61. {
  62. tmp=queueKless.top();
  63. queueKless.pop();
  64. cout<<tmp.second<<"\t"<<tmp.first<<endl;
  65. }
  66. cout<<"< Elapsed Time: "<<(clock()-t)/CLOCKS_PER_SEC<<" s>"<<endl;
  67. }
  68. int main()
  69. {
  70. int k=0;
  71. cout<<"http://blog.csdn.net/NUPTboyZHB\n";
  72. while (true)
  73. {
  74. cout<<"查看前K个频率最高的汉字,K=";
  75. cin>>k;
  76. if(k<=0)break;
  77. topK(k);
  78. }
  79. return 0;
  80. }

[图1]

2.统计英文单词的出现频率。这比统计汉字更加的容易,因为单词和单词之间是用空格分开的,所以,直接将单词保存到string中即可。

[c++ code]

  1. /*
  2. *@author:郑海波 http://blog.csdn.net/NUPTboyZHB
  3. *参考:实验室小熊
  4. *注:有删改
  5. */
  6. #pragma warning(disable:4786)
  7. #include <iostream>
  8. #include <vector>
  9. #include <fstream>
  10. #include <string>
  11. #include <map>
  12. #include <queue>
  13. #include <ctime>
  14. using namespace std;
  15. void topK(const int &K)
  16. {
  17. double t=clock();
  18. ifstream infile;
  19. infile.open("test.txt");
  20. if (!infile)
  21. cout<<"can not open file"<<endl;
  22. string s;
  23. map<string,int>wordcount;
  24. while(true)
  25. {
  26. infile>>s;
  27. if(infile.eof()) break;
  28. wordcount[s]++;
  29. }
  30. cout<<"单词种类:"<<wordcount.size()<<endl;
  31. //优先队列使用小顶堆,排在前面的数量少,使用">";
  32. priority_queue< pair< int,string >,vector< pair< int,string > >,greater< pair< int,string> > > queueK;
  33. for (map<string,int>::iterator iter=wordcount.begin(); iter!=wordcount.end(); iter++)
  34. {
  35. queueK.push(make_pair(iter->second,iter->first));
  36. if(queueK.size()>K)
  37. queueK.pop();
  38. }
  39. pair<int,string>tmp;
  40. priority_queue< pair< int,string >,vector< pair< int,string > >,less< pair< int,string> > > queueKless;
  41. while (!queueK.empty())
  42. {
  43. tmp=queueK.top();
  44. queueK.pop();
  45. queueKless.push(tmp);
  46. }
  47. while(!queueKless.empty())
  48. {
  49. tmp=queueKless.top();
  50. queueKless.pop();
  51. cout<<tmp.second<<"\t"<<tmp.first<<endl;
  52. }
  53. cout<<"< Elapsed Time: "<<(clock()-t)/CLOCKS_PER_SEC<<" >"<<endl;
  54. }
  55. int main()
  56. {
  57. int k=0;
  58. cout<<"http://blog.csdn.net/NUPTboyZHB\n";
  59. while (true)
  60. {
  61. cout<<"PUT IN K: ";
  62. cin>>k;
  63. if(k<=0)break;
  64. topK(k);
  65. }
  66. return 0;
  67. }

[图2]

参考:实验室小熊

c++实现文本中英文单词和汉字字符的统计的更多相关文章

  1. 题目--统计一行文本的单词个数(PTA预习题)

    PTA预习题——统计一行文本的单词个数 7-1 统计一行文本的单词个数 (15 分) 本题目要求编写程序统计一行字符中单词的个数.所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以 ...

  2. 《c程序设计语言》读书笔记--统计 行数、单词数、字符数

    #include <stdio.h> int main() { int lin = 0,wor = 0,cha = 0; int flag = 0; int c; while((c = g ...

  3. C语言输出单个汉字字符

    #include "stdio.h" #include "windows.h" int main() { ] = { "多字节字符串!OK!" ...

  4. shell统计文本中单词的出现次数

    Ubuntu14.04 给定一个文本,统计其中单词出现的次数 方法1 # solution 1 grep与awk配合使用,写成一个sh脚本 fre.sh sh fre.sh wordfretest.t ...

  5. JS实现文本中查找并替换字符

    JS实现文本中查找并替换字符 效果图: 代码如下,复制即可使用: <!DOCTYPE html><html> <head> <style type=" ...

  6. java统计文本中单词出现的个数

    package com.java_Test; import java.io.File; import java.util.HashMap; import java.util.Iterator; imp ...

  7. C 循环统计输入的单词个数和字符长度

    C 循环统计输入的单词个数和字符长度 #include <stdio.h> #include <Windows.h> int main(void) { ]; ; ; print ...

  8. linux wc 的用法-linux 下统计行数、单词数、字符个数

    linux wc 的用法-linux 下统计行数.单词数.字符个数   wc : wc -l 统计有多少行 wc -w 统计有多少个单词 wc -c 统计有多少个字符

  9. 华为oj之字符个数统计

    题目:字符个数统计 热度指数:4720 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127). ...

随机推荐

  1. (干货)Linux学习资源推荐

    源地址 国内的专业Linux网站(GB) ChinaUnix Linux中国 实验楼: 免费提供了Linux在线实验环境,不用在自己机子上装系统也可以学习Linux,超方便实用!. 国内的专业Linu ...

  2. android控件的属性

    android控件的属性 本节描述android空间的位置,内容等相关属性及属性的含义 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 ( ...

  3. 【转】MySQL的安装与配置

    一.MySQL的安装 1.在线安装: 命令:sudo apt-get install mysql-server 在安装的过程中将提示为“root”用户设置密码,输入自己的密码即可,安装按成后已自动配置 ...

  4. 让.NET程序会说话

    在开发过程中需要用到让程序自动播放语音,如果是一个一个录则太麻烦了,在开发过程中发现.NET已经自带了该功能 Type type = Type.GetTypeFromProgID("SAPI ...

  5. 第十篇、微信小程序-view组件

    视图容器 常用的样式的属性: 详情:http://www.jianshu.com/p/f82262002f8a display :显示的模式.可选项有:flex(代表view可以伸缩,弹性布局)- f ...

  6. Win7设置共享文件夹

    在系统中,实现共享的前提是,双方要在同一个局域网内,同一个工作组或者域内. 添加共享用户 点击确定即可,最好把共享的权限设置为只读类型,方便管理. 可以使用计算机的用户名或者IP地址来访问 如果还是不 ...

  7. JBoss部署项目log4j配置会造成死锁问题,浏览器访问一直pending状态

    今天将项目部署到JBoss服务器上,部署成功后,浏览器访问页面一直在等待响应. 查了很长时间,最后在服务器上通过jstack pid命令查看Java堆栈信息,发现了有两个线程死锁. 看到造成死锁的原因 ...

  8. ubuntu后台配置无线网络

    一.静态配置: 1.编辑 /etc/network/interfaces: auto loiface lo inet loopback auto wlan0iface wlan0 inet stati ...

  9. RHEL6.3 ftp服务器参数的戏说——不看白不看,看了不白看

    大家都知道ftp服务器的应用何止广,简直就是无处不在,配置简单的ftp服务谁都会,无外乎就是刚安装好ftp服务,一启动就ok了:或是达到简单的上传下载修改下/var/ftp/pub的权限,配合配置文件 ...

  10. grails的插件

    今天来歪理邪说一下grails的插件. 有个问题让本人困惑了一段时间,插件是属于grails的,还是属于某个工程的?为什么会有这个问题呢,这涉及到grails插件的安装方式. grails的插件像是一 ...