C++ 基础趣味编程 字母频率

自行在网上下载英文文章,要求字母个数在1万以上,如果不到1万,请下载多篇合并,命名为data.txt。
对于data.txt,完成以下作业:
(1)统计26个字母出现的频率(出现次数在所有字母个数中占的百分比),并排序。
(2)输入一个字母,找出和它最亲密的三个字母(最亲密的意思是:和它一起相邻出现的次数最多)。
(3)找出出现频率最高的五个单词并排序。
(4)将前3个题目中的结果以合理的形式输出到文件result.txt。

要详细代码,请采纳本问题,并且一个问题只解决一个需求。

代码,在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 << "other\t" << (double)arr[26] * 100.0 / (double)all << "%" << endl;
    return 0;
}

如需要2 3 4问回答,请重新提问。

这是我用的文本,一部小说。
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

(总字符数,含标点,316444)

谢谢啦,帮大忙了。我会好好参考,编出自己的代码的!