【经典算法】:基于中文字符分析的统计频率算法实现
来源:互联网 发布:海岛奇兵导弹数据 编辑:程序博客网 时间:2024/06/14 06:12
前言
//这篇文章和我的上篇文章 :英文频率统计
//息息相关,可以作为参考
正文:
在生活中,我们会有这样的困扰,比如说要统计一篇作文中 某个字符出现的次数,该咋办?
人工肯定会这么弄,把一篇文章从第一个数到最后一个,然后统计出来
这样确实不错,但是当文章足够大时就显得特别费劲,并且特别笨重,所以就一定要智能的完成这个功能,这篇文章所介绍的技术就是这个,当然基于这个基础还能干很多的事,这得需要探讨才能发现。
技术基础
关于计算机里面中文和英文的存储区别:
中文:用两个字节存储
英文:用一个字节存储
这里参考我一篇文章:中文的计算机存储格式
所以中文在分离时就要用一些特殊的方法,我这里用了一个存储结构
1)用字符串存满文章的各个字,不管是中文还是英文都存进字符串里面去
2)用一个特殊的结构来存储字符,这样保证中文和英文都能分离
3)利用类似冒泡排序的方法查找重复的元素,然后统计,最后输出结果
技术实现
1)文件读取技术,把txt文件里面的数据读取出来
2)数据分离:把txt里面的中英文分离,放到指定的存储结构里面去(struct 结构体)
3)数据统计:把数据放进统计的结构体里面去,同时记录其值
代码
//author :seen//time: 2015-10-11#include <iostream>#include <fstream>#include <iomanip>using namespace std;struct data{ //存储文章内容 char s[3];}D[1000];struct res{ //存储各不相同的字符 char s[3]; int value;}R[1000];int Is(char s[3],int k){ for(int i=0;i<k;i++){ if(strcmp(s,R[i].s)==0) return 0; } return 1;}void main(){ char s[50000]; fstream f("d:\\数据.txt",ios::in ||ios::out); if(!f) cout<<"mistake"<<endl; int count=0; while(f>>s[count] &&!f.eof()){ count++; //count统计中英文字符共多少字节 } cout<<count<<endl; int new_count=0; //new_count统计中英文字符共有多少个 for(int i=0;i<count;i++){ if((int)s[i]<0){ D[new_count].s[0] = (int)s[i]; i++; D[new_count].s[1] = (int)s[i]; D[new_count].s[2] = '\0'; new_count++; } else if((int)s[i]>0){ D[new_count].s[0] = (int)s[i]; D[new_count].s[1] = '\0'; new_count++; } } cout<<new_count<<endl; int pos = 0; //pos统计中英文字符共多少类 for(i=0;i<new_count;i++){ if(Is(D[i].s,pos)){ //如果是新出现的数就返回1 strcpy(R[pos].s,D[i].s); pos++; R[pos].value = 1; } else{ for(int j=0;j<pos;j++){ if(strcmp(R[j].s,D[i].s)==0){ R[j].value++; } } } } cout<<"种类"<<pos<<endl; for(i=0;i<pos;i++) cout<<setw(2)<<i+1<<" "<<setw(3)<<R[i].s<<" "<<setw(2)<<R[i].value<<endl;//格式化输出,依次为字符标号,字符,统计的数量}
截图
txt文件截图:
运行截图:
0 0
- 【经典算法】:基于中文字符分析的统计频率算法实现
- 【经典算法】:英文文章统计字符频率
- 使用hash算法统计字符串中字符出现的频率
- 字符统计(经典的算法与思想)
- 有关统计单词频率的算法c语言实现
- 有关统计单词频率的算法c语言实现
- 有关统计单词频率的算法c语言实现
- 统计文件中单词频率的各种算法实现
- AS3实现经典算法(四) 统计字符串中数字、英文字母、空格和其它字符的个数
- js实现统计字符算法
- 基于bf算法统计文本中某个单词出现的频率
- 中文分词算法——基于统计的分词
- 对于求字符串中出现频率最高字符的算法实现
- 统计学习方法:基于SMO算法的SVM的Python实现
- 基于词典的中文情感倾向分析算法设计
- 基于词典的中文情感倾向分析算法设计
- 基于词典的中文情感倾向分析算法设计
- 基于词典的中文情感倾向分析算法设计
- [Django入门知识浅介]Django的一些优缺点评析
- java 中StringBuffer类(或者StringBuilder)和String的区别
- WIN7 64 安装串口驱动和mini2440USB驱动
- MySQL索引背后的数据结构及算法原理
- 如何测试一个用户登录界面
- 【经典算法】:基于中文字符分析的统计频率算法实现
- ksh 多进程
- J2EE学习篇之--JDBC详解
- java遍历arrayList的四种方法
- VC/MFC 进程间通信方法总结
- linux文件属性
- 黑马程序员——java高新技术之反射
- js学习笔记_闭包
- 背包问题3:多重背包问题