#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<memory.h>
void strlen_pro(const char*str){
int size = strlen(str);//strlen()用来计算指定的字符串s 的长度,不包括结束字符”\0”
//chArray和occurArray按顺序对应出现的字符和它对应的频数,相对于字典dict[ch]=num
char*chArray = (char*)malloc(sizeof(char)*size);//字符数组
int*countArray=(int*)malloc(sizeof(int)*size);//频数数组
// char*occurCharArray=(char*)malloc(sizeof(char)*size);
char occurCharArray;//表示第一个出现最高频率的字符,其实可以不用上面的字符数组保存所有的相同最高频率的字符,只需要保存第一个
memset(countArray,-1,sizeof(int)*size);//全部频数置为-1,其实也可以不用,习惯初始化下数组比较好
// count表示字符-频数组合的个数,in是代表bool型,表示判断字符是否在字符-频数组合里出现,没有就加上
// maxTime表示字符-频数组合内最大的频数
// time表示字符-频数组合内字符对应的频数
// resultCount表示最终结果的个数
// 思路:先遍历一遍,获取每个字符的频数,再对频数遍历一边,判断出最多频数和为这个频数值的所有字符
int i,j,count=0,in=0,maxTime=0,time=0,resultCount=0;
char ch;
for(i=0;i<size;i++){
ch = str[i];
in = 0;
for(j=0;j<count;j++){
if(chArray[j]==ch){
in=1;
countArray[j]+=1;
break;
}
}
if(in==0){
chArray[j]=ch;
countArray[j]=1;
count+=1;
}
}
resultCount=1;
maxTime=countArray[0];
//occurCharArray[0]=chArray[0];
occurCharArray=chArray[0];
for(i=1;i<count;i++){// 根据字符-频率排序
time=countArray[i];//出现频率
if(time>maxTime){
// 出现比当前最大频数还大的频数,之前的数组没用了,需要重新填充,
// 但是不需要全部清空再填充,只需要用resultCount记录数组有效位置个数
maxTime=time;
resultCount=1;
//occurCharArray[0]=chArray[i];
occurCharArray=chArray[i];
}else if(time==maxTime){
//occurCharArray[resultCount]=chArray[i];
resultCount+=1;
}
}
if(resultCount==1)
printf("%d %c\n",size,occurCharArray);
//printf("%d %c\n",size,occurCharArray[0]);
else
printf("%d They are too many!!!\n",size);
free(countArray);
free(chArray);
//free(occurCharArray);
}
int main(){
char str[1000];
scanf("%s",str); //abcde
strlen_pro(str);
system("pause"); // 这个是因为我用vscode,它不加这句会闪退
return 0;
}

