解题思路:
1.利用while循环不断读入一个字符,然后创建一个num数组用下标来计算每个字母出现的次数
2.统计完次数之后,找到出现最多的字母次数,因为打印的行数取决于最大值
3.然后创建循环,从最大值开始遍历,枚举每一个字母的次数,如果该字母的次数大于等于i,则输出* 否则的话打印两个空格(当字母没有到达该次数的时候,要打印空格,腾出位置)
4.最后打印最后一行的字母
#include<bits/stdc++.h>
using namespace std;
int num[30];
int main()
{
char ans;
while(cin>>ans)//不断读入一个字符
{
if(ans>='A'&&ans<='Z')//如果是大写字母的话
num[ans-'A']++;//桶排序计数
}
int max=0;//找到字母出现次数的最大值
for(int i=0;i<=25;i++)
if(num[i]>max)
max=num[i];
for(int i=max;i>=1;i--)//从最大值开始遍历
{
for(int j=0;j<=25;j++)//枚举每一个字符
{
if(num[j]>=i)//如果该字符出现的次数大于等于i
cout<<"* ";//打印*和空格
else
cout<<" ";//否则,打印两个空格
}
cout<<endl;//换行
}
for(int i=1;i<=26;i++)//输出最下方的一行字母
{
cout<<(char)(i+64)<<" ";
}
return 0;
}