写了一个,谨作参考。
程序代码:
/*------------------------------------------------------------------------------ 输入一串字符,统计并输出字符串中出现频率最高的字母及出现次数,可能有多个 出现频率最高的字母,字母不区分大小写,输出时用大写字母,输出格式printf("%c: %d\t", );程序说明:用数组来统计各字母个数。如:用a[0]统计’a’字母的个数, a[25]统计’z’字母的个数. ------------------------------------------------------------------------------*/ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #define N 100 #define Y 26 int cmp(const void *a,const void *b) { return(*(char *)a-*(char *)b); } void SWITCH(char *a) /* 字符变换,全部变换成大写字母 */ { while(*a) { *a=toupper(*a); a++; } } void sta() { char _a[N],*a; int _b[Y]={0},max,i,*b; a=_a; b=_b; puts("input a[]:"); gets(a); /* 输入 */ SWITCH(a); /* 变换 */ qsort(a,strlen(a),sizeof(a[0]),cmp); /* 排序 */ while(*a) { if(*a>=65&&*a<=90&&*a==*(a+1)) b[*a-65]++; a++; } /* 记数器数组 b 赋值 */ for(max=*b,i=0;i<Y;++i) if(max<*(b+i)) max=*(b+i); /* 找出最大值 */ for(i=0;i<Y;++i) if(max==b[i]) printf("%c--%d\n",i+65,b[i]+1); /* 输出 */ } int main(void) { sta(); return 0; }