题解 | 字符统计

字符统计

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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
01-22 18:07
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务