问题
输入一串字符串,以“$”结束,分别统计各大写字母出现的次数,并按字母出现的多少输出(先输出出现次数多的,次数相同的按照字母表输出,不出现的字母不输出)。
算法思想
- while(1)循环输入一个字符串,用length统计长度,当length超出数组大小或者出现$时,停止输入。
- 计数清零,依次统计出现的大写字母的次数,存入到num数组中
- 遍历num数组,找到最大的值max,即出现次数最多的字母输出,依次输出,每输出一个所在位置清零,直到全部输出
#include<bits/stdc++.h>
using namespace std;
int main(){
int num[26];
char ch[100];
for(int i=0;i<26;i++){
num[i]=0;//计数清零
}
int length=0;
cout<<"请输入一串字符:";
while(1){
cin>>ch[length];
length++;
if(length>100||ch[length-1]=='$') break;
}
for(int i=0;i<length;i++){
if(ch[i]>='A'&&ch[i]<='Z'){
num[(ch[i]-'A')]++;//统计字符
}
}
//找出现次数最多的打印
//aAAAYYYYuiOOOOOBBFC23$
for(int i=0;i<26;i++)
{
int max=0;
for(int j=0;j<26;j++){
if(num[j]>num[max]){
max=j;
}
}
if(num[max]!=0){
cout<<char(max+'A')<<":"<<num[max]<<endl;
num[max]=0;
}else break;
}
return 0;
}
收获
如何输出出现次数最多的
for(int i=0;i<26;i++)
{
int max=0;
for(int j=0;j<26;j++){
if(num[j]>num[max]){
max=j;
}
}
if(num[max]!=0){
cout<<char(max+'A')<<":"<<num[max]<<endl;
num[max]=0;
}else break;
}