问题:
给你一串字符串由“A-Z”组成代表不同类型的飞龙。比如“BCABCA”,你需要以JHL统计法来统计下每个字母的数量,即输出每个字母的数量在这个字母之前,比如答案为“2A2B2C”。(答案按照字典序输出,即答案不能为2B2C2A)。
输入:
第一行输入一个T(T<=500)表明有T组测试样例,在每个测试样例中,输入一个字符串,不超过1000个字母,保证都为大写字母。
输出:
对于每个测试样例,输出占一行,按上文描述输出结果。
例如:
输入: 1 输出:2A2B2C
ABCABC
代码:
#include <stdio.h>
void main()
{
int i,t;
char str[1000];
scanf("%d",&t);
while(t--)
{
int a[100]={0};
scanf("%s",str);
for(i=0;i<strlen(str);i++)
{
a[str[i]-\'A\']++;
//str[i]-\'A\'是把字母转换成数字,在数组a中储存起来,如str[i]=C
//则 str[i]-\'A\'=2;a[str[i]-\'A\']++是数组a[i]的自增运算。第一次
//循环a[2]=1;再循环一次就是a[2]=2;为的是统计相同字母的个数
}
for(i=0;i<26;i++)
{
if(a[i] != 0)
{
printf("%d%c",a[i],i+\'A\');//数字i加上字母\'A\',结果也是字母如:2+\'A\'=\'C\'
}
}
printf("\n");
}
}
扩展:
a[str[i]-\'A\']++ 如果换成“ a[str[i]-65]++“。效果是一样的。
根据ASCII字符表,\'A\'对应数字65,以此类推\'Z\'对应数字90,所以如果str[i]=\'Z\',则a[str[i]-65]=25;