请编写程序,找出一段给定文字中出现最频繁的那个英文字母。
输入格式:
输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束(回车不算在内)。
输出格式:
在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。
输入样例:
This is a simple TEST. There ARE numbers and other symbols1&2&3…
输出样例:e 7
思路:
我们把所有的字符全部转成小写,然后再统计,这样会方便很多。
这里将字母大写转化为小写的函数是 tolower(); 在文件 “cctype”(c++)中。
除此之外,我们用cin.get(数组名,数组大小);来输入任意大小的字符.
代码中,我将代码块分成了
1. 输入部分
2. 逻辑处理部分
3. 输出部分
#include<iostream>
#include<cstdio>
#include<cctype>
using namespace std;
int main()
{
int temp=0,max=-1000;
int loc[27]={
0}; //记录每一个字符出现的次数。比如字符a出现一次,那么loc[0]=1;以此类推。
char arr[1002];
//输入部分
cin.get(arr,1002); //cin.get()函数可以接受空格键。
//逻辑处理部分
for(int i=0;arr[i]!='\0';i++) //该循环中arr[i]!='\0'的意思是:循环进行到数组结束符为止。
{
arr[i]=tolower(arr[i]); //将所有字符都转化成小写。
loc[arr[i]-'a'] ++; //字符一个个监测,检测到一个对应位置+1
}
for(int i=0;i<27;i++)
{
if(max<loc[i])
{
max=loc[i];
temp=i; //找到最大值,并把第一次出现的最大值赋值给temp
}
}
//输出部分
char g='a'+temp; //例如:'a'+1=b; 一个道理
cout<<g<<" "<<max;
}
结果: