/*Author:shizhixin
Email:szhixin@gmail.com
Blog:http://blog.csdn.net/ShiZhixin
Date:Dec 14,2009
Function:长为10000的字符串,由a-z及A-Z组成,统计出其中出现频率最高的字母
算法思想:
声明一个长度为52的数组nCountTable,遍历一遍待查数组,对于其出现的任意字母charCurrent,将nCountTable[charCurrent-'a']++,最后遍历一下nCountTable,查找最大的。
Note:同学在面试时碰见这个题目,略感兴趣。这个算法是自己实现的,注意题目要求字符串中只包含a-z,A-Z,程序如有错误,或更好的实现算法,希来邮件告知,倍感高兴。
*/
#include "iostream.h"
//遍历一下nTable数组中最大的数,并返回其下标,n为数组大小
int GetMaxCount(int nTable[],int n)
{
int max=0;
int k=0;
for (int i=0;i<n;i++)
{
if (nTable[i]>max)
{
max=nTable[i];
k=i;
}
}
return k;
}
void main()
{
char* cpStr="httpblogcsdnnetShiZhixin";//待查找字符串,字符串中只包含a-z,A-Z
int nCountTable[52]={0};//统计频率表
int nCountTemp;//当前字符的ASCII
do
{
nCountTemp=*cpStr;
if (nCountTemp>='a')
{
nCountTemp-='a'-26;//a-z
}
else
{
nCountTemp-='A';//A-Z
}
nCountTable[nCountTemp]++;
cpStr++;
} while (*cpStr!='/0');
int nMaxCount=GetMaxCount(nCountTable,52);//遍历频率表,查找出现频率最多的下标
char cMax=nMaxCount;
if (nMaxCount>=26)
{
cMax+='a'-26;//a-z
}
else
{
cMax+='A';//A-Z
}
cout<<"字符串中频率最多的字符是:"<<cMax<<" "<<"共有"<<nCountTable[nMaxCount]<<"个";
}