欢迎光临散文网 会员登陆 & 注册

《编程思维与实践》1033.字符频率

2023-04-09 01:22 作者:风浅叶墨  | 我要投稿

题目

思路

小写字母和大写字母存相同的频率,之后再判断字母频率是否相同,相同时再判断是否为大小写的区别.

代码

#include<stdio.h>
#include<stdlib.h>

double weigh[128]={0};          //每个位置的权重 

int cmp(const void *a,const void *b)
{
    char *m=(char*)a;
    char *n=(char*)b;

    if(weigh[*m]!=weigh[*n])
    {
        return weigh[*m]<weigh[*n]?1:-1;
    }
    else{
        if((*m>='a'&&*m<='z')&&(*n>='a'&&*n<='z'))  //同小写
        {
            return *m-*n;
        }
        else if((*m>='A'&&*m<='Z')&&(*n>='A'&&*n<='Z'))  //同大写
        {
            return *m-*n;
        }
        else if((*m>='a'&&*m<='z')&&(*n>='A'&&*n<='Z'))  //一个小写一个大写 将小写变成大写(-32)
        {
            return *m-32>*n?1:-1;
        }
        else if((*m>='A'&&*m<='Z')&&(*n>='a'&&*n<='z')) //一个小写一个大写 将小写变成大写(-32)
        {
            return *m>*n-32?-1:1;
        }
    }
}

int main()
{
    int T;
    scanf("%d",&T);
    for(int i=0;i<T;i++)
    {
        double temp;
        for(int j=0;j<26;j++)
        {
            scanf("%lf",&temp);
            weigh['a'+j]=temp;
            weigh['A'+j]=temp;
        }
        char s[101];  //不超过100个字符
        scanf("%s",s);
        qsort(s,strlen(s),sizeof(char),cmp);
        printf("case #%d:\n",i);
        printf("%s\n",s); 
    }
    return 0;
}


《编程思维与实践》1033.字符频率的评论 (共 条)

分享到微博请遵守国家法律