用陣列計算字母出現的次數,並把第一次出現的字母存到另一個陣列,在 sort 和顯示時,可
以用來做 map。
注意:qsort 的 compare function 的 return value,value < 0 : 不交換,value >= 0 : 交換。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int alphabet[300]={0};
int compare(const void *a, const void*b){
int aa,bb;
aa=*(int*)a;
bb=*(int*)b;
if(alphabet[aa] < alphabet[bb]){
return 1;
}else if(alphabet[aa] == alphabet[bb]){
if(aa > bb) return 1;
}
return -1;
}
int main(void){
int lines,i,j,tmp;
char input[10000],c;
int order[26],top;
while(scanf("%d%c",&lines,&c)!=EOF){
memset(alphabet,0,sizeof(alphabet));
top=-1;
for(i=0;i<lines;i++){
fgets(input,10000-1,stdin);
for(j=0;input[j]!='\n';j++){
tmp=toupper(input[j]);
if(tmp >= 'A' && tmp <='Z'){
++alphabet[tmp];
if(alphabet[tmp]==1){
order[++top]=tmp;
}
}
}
}
qsort(order,top+1,sizeof(int),compare);
for(i=0;i<=top;i++){
printf("%c %d\n",order[i],alphabet[order[i]]);
}
}
return 0;
}
沒有留言:
張貼留言