问题描述
- C++ 基础趣味编程 字母频率
-
自行在网上下载英文文章,要求字母个数在1万以上,如果不到1万,请下载多篇合并,命名为data.txt。
对于data.txt,完成以下作业:
(1)统计26个字母出现的频率(出现次数在所有字母个数中占的百分比),并排序。
(2)输入一个字母,找出和它最亲密的三个字母(最亲密的意思是:和它一起相邻出现的次数最多)。
(3)找出出现频率最高的五个单词并排序。
(4)将前3个题目中的结果以合理的形式输出到文件result.txt。
解决方案
要详细代码,请采纳本问题,并且一个问题只解决一个需求。
解决方案二:
这是我用的文本,一部小说。
http://vdisk.weibo.com/s/BAFPyhehSsl
结果:
Q 0.0407655%
Z 0.0515099%
X 0.0850071%
J 0.22026%
V 0.592838%
K 1.04631%
P 1.07033%
F 1.25899%
B 1.32504%
C 1.61545%
G 1.80853%
Y 1.91535%
W 1.91914%
M 2.02216%
U 2.28634%
L 2.89403%
D 3.68027%
R 3.73873%
S 4.34548%
H 4.52718%
N 4.74144%
I 4.95886%
O 5.51377%
A 5.81303%
T 6.80816%
E 8.58983%
other 27.1312%
Press any key to continue
解决方案三:
代码,在VC6.0下编译通过
// MyApp1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;
int arr[27];
int order[27];
int cmp(const void *a, const void *b)
{
return arr[*(int *)a] - arr[*(int *)b];
}
int main(int argc, char* argv[])
{
memset(arr, 0, sizeof(int) * 27);
ifstream in("c:\1.txt");
int all = 0;
for (string s; getline(in,s); )
{
const char * pchar = s.c_str();
int len = strlen(pchar);
for (int i = 0; i < len; i++)
{
all++;
if (pchar[i] >= 'a' && pchar[i] <= 'z')
{
arr[pchar[i] - 'a']++;
continue;
}
if (pchar[i] >= 'A' && pchar[i] <= 'Z')
{
arr[pchar[i] - 'A']++;
continue;
}
arr[26]++;
}
}
for (int i = 0; i < 27; i++)
{
order[i] = i;
}
qsort(order, 27, sizeof(int), cmp);
for (i = 0; i < 26; i++)
{
cout << (char)('A' + order[i]) << "t" << (double)arr[order[i]] * 100.0 / (double)all << "%" << endl;
}
cout << "othert" << (double)arr[26] * 100.0 / (double)all << "%" << endl;
return 0;
}
如需要2 3 4问回答,请重新提问。
解决方案四:
(总字符数,含标点,316444)
解决方案五:
谢谢啦,帮大忙了。我会好好参考,编出自己的代码的!
时间: 2024-09-15 15:07:57