如何统计一篇文章中不同字出现的次数?

来源:百度知道 编辑:UC知道 时间:2024/07/02 19:29:59
我现在想统计一篇文章中不同字出现的次数。之后再以出现次数从多到少的顺序输出。
现在的方法是先用map容器统计,然后再将pair<string*,size_t>导入到vector当中,再根据size_t中的内容sort排序。
但我觉得这个方法太慢了,请问谁能提出更快的方法!~

用现成的工具Replace Pioneer可以找出所有字并可以按词频排序。

详细步骤:

1. 选择Tools->Pattern Counter菜单
2. 在上面的Source选择 File/http,然后在右边输入(或选择)txt文本的路径。
3. 确定Counter Template选择的是Characters, Words, Lines(默认值)
4. 点中第1行Chars(word)表示非标点字符,然后点击Detail,就可以按照出现次数列出所有字的频率。

不仅如此,你还可以统计任何模式的出现频率。

我有个想法:
这里我以ASCII码表中字符为例:
定义一个int array_A[128];char array_B[128];
并初始化array_A和array_B
memset(array_A, 0, sizeof(int)*128);
for(int i=0; i<128; i++)
array_B[i] = i;

这里有个字符串:char p[]="aaaBBB+!+!+!",统计该字符串的所有种类字符出现个数可以用下面的循环,直接将每个字符对应到数组的第几个元素
for(int i=0; i<strlen(p); i++)
array_A[int(p[i])]++;
遍历字符串后:
array_A[97](表示a字符出现的个数)array_B[97] == 'a'
array_A[66](表示B字符出现的个数)array_B[66] == 'B'
array_A[43](表示+字符出现的个数)array_B[43] == '+'
array_A[33](表示!字符出现的个数)array_B[33] == '!'
都为3,其余全为零。
下面就是排序算法的问题了,根据array_A数组的值进行排序并同时移动array_B的值,这样便可以得出了吧,写了这么多,个