《編程思維與實踐》1033.字符頻率
題目


思路
小寫字母和大寫字母存相同的頻率,之后再判斷字母頻率是否相同,相同時再判斷是否為大小寫的區(qū)別.
代碼
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;
}