题解 | #字符统计#
字符统计
http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
建立count[36]数组,如下图。记录数字和小写字母的个数。如,字符串中有3个'8',count[8]=3.有6个'b',count[11]=6.
第一轮,找到最大的count[i],令max=最大值;pos=i.输出pos对应的字符。若pos<10,输出pos+'a'.否则,输出pos-10+'a'
令count[pos]=0;重置max=0,pos=0.
第二轮重复第一轮。
循环的结束条件:每轮找到最大值max后,若max=0,跳出循环,否则输出pos对应的字符。
#include<stdio.h>
#include<string.h>
int main(){
int count[36]={0};
char str[1001]={'\0'};
while(scanf("%s",str)>0){
for(int i=0;i<strlen(str);i++){
if(str[i]>='0'&&str[i]<='9')
count[str[i]-'0']++;
if(str[i]>='a'&&str[i]<='z')
count[str[i]-'a'+10]++;
}
int max=0,pos=0;
while(1){
for(int i=0;i<=35;i++){
if(count[i]>max){
max=count[i];
pos=i;
}
}
if(max==0)
break;
if(pos<10)
printf("%c",pos+'0');
else printf("%c",pos-10+'a');
count[pos]=0;
max=0;
pos=0;
}
}
}