问题描述
输入一个由小写字母组成的字符串(字符数量 ≤100 ),输出出现次数最多的小写字母。
注意:如果有多个小写字母出现的次数一样多,则输出ASCII码值最大的那个字母。
输入
一个字符串。
输出
出现次数最多的小写字母。
#include<iostream>
#include<string>
using namespace std;
string s;
int main()
{
cin>>s;//输入这个字符串
int a=s.size();//获取字符串的长度
int max=0,m;//max记录出现字母最多的次数,m用来进行累加;
for(int i=0;i<a-1;i++)//先使用冒泡排序把这个字符串按字母从小到大的顺序进行排列
{
for(int j=0;j<a-1-i;j++)
{
if(s[j]>s[j+1])
{
//开始对比后,如果第一个字母比第二个字母大则进行交换
int temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
char z[26];//定义一个字符数组
char c;
int j=0;
for(int i=0;i<26;i++)//把26个小写字母填充到该字符数据里去
{
z[i]=i+97;
}
for(int i=0;i<26;i++)//依次循环遍历,直到26个字母都判断完毕
{
m=0;//m下面循环判断后要归零从新开始累加;
while(1)//因为不知道每个字母重复的次数所以使用无限循环
{
if(s[j]==z[i])//字符串里的字符刚好等于该数组里的字母
{
m++;//则次数+1
}
else
break;
j++;//字符串字符不断+1
}
if(m>max||m==max)//每个字符重复次数计算完后,判断该字母出现次数是否大于前一个字母出现的次数
{//如果次数大于或等于
max=m;
c=z[i];//则把这个字符赋给字符c;这里因为字符串和字符数组都是按照小到大排列的,所以不用再次去判断数量相等时输出ASCII更大的那个字符了;
}
}
cout<<c;
return 0;
}