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


思路
小写字母和大写字母存相同的频率,之后再判断字母频率是否相同,相同时再判断是否为大小写的区别.
代码
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;
}

