长为10000的字符串,由a-z及A-Z组成,统计出其中出现频率最高的字母

49 篇文章 0 订阅
35 篇文章 0 订阅

/*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]<<"个";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值