题解 | 字符统计
字符统计
https://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int _cmpup( const void* a , const void *b)//小到大
{
return( *(char*)a - *(char*)b);
}
int _cmplow( const void* a , const void *b)//大到小
{
return( *(char*)b - *(char*)a);
}
int main() {
char inp[1001]={0};//输入
int count[36]={0};//计数
int lowcnt[36]={0};//计数后降序
gets(inp);
qsort(inp,strlen(inp),sizeof(char),_cmpup);//先对输入排升序
char *p=inp;
while(*p!='\0')//开始计数
{
if(isdigit(*p))//数字字符
{ count[*p-'0']++;
lowcnt[*p-'0']++;
}
if(islower(*p))//小写字母
{count[10+(*p-'a')]++;
lowcnt[10+(*p-'a')]++;
}
p++;
}
qsort(lowcnt,36,sizeof(int),_cmplow);//计数数组降序
int *low=lowcnt;//两个指针遍历计数数组和降序计数数组
int *cou=count;
for(; *low!=0 ;low++)
{
for(cou=count;cou<count+36 ; cou++)
{
if(*cou==*low)//如果原计数与当前最大计数相等
{
*cou=0;//当前计数置零,防止多个最大计数出现
if(cou>=count&&cou<=count+9)//输出当前计数数字字符
printf("%c",(char)(cou-count)+'0');
if(cou>count+9 && cou<count+36)
printf("%c",(char)(cou-count)-10+'a');//输出当前计数小写字母
break;
}
}
}
return 0;
}

查看5道真题和解析