题目大意:
题目是要计算所给的文字中计算出各个字母的数量,然后按从大到小的顺序输出,如果数量相同的按字母顺序排列。数量是0的不用输出。
题目只需要逐个记录输入的字符并计数就可以了。。。输入开头的数字代表的是接下来有几行,但是这几行的字符都是一起统计的,所以可以直接读入字符,并不需要管他有几行。 直接使用while(scanf("%c",&c)!=EOF)循环来逐个读入字符。用一个包含一个大写字母和一个数字的结构体数组来保存数量。按顺序表示好A-Z之后,输入的字符如果是大写字符,减去'A'字符得到结构体数组的编号(从0开始的),小写字符要减'a'。
输出的时候从0开始逐一检索找出最大值,如果有数量相等的要取前面的字母先输出。每输出完一个要把当前字母的数据变为0;输出结束的标志是找到的最大值为0,说明全部都已经输出完成了。
附上代码:
View Code
1 #include<stdio.h> 2 struct al 3 { 4 int n; 5 char alph; 6 }; 7 int main() 8 { 9 struct al a[26]; 10 char c; 11 int i,maxi,bo; 12 for(i=0;i<26;i++) 13 { 14 a[i].n=0; 15 a[i].alph=i+'A';//初始化结构体 16 } 17 while(scanf("%c",&c)!=EOF) 18 { 19 if(c>='A'&&c<='Z')//大写字母 20 { 21 a[c-'A'].n++; 22 } 23 else if(c>='a'&&c<='z')//小写字母 24 { 25 a[c-'a'].n++; 26 } 27 } 28 maxi=0; 29 bo=0; 30 while(1) 31 { 32 for(i=1;i<26;i++) 33 { 34 if(a[maxi].n<a[i].n) maxi=i;//找出最大值的编号 35 } 36 if(a[maxi].n!=0) 37 { 38 printf("%c %d\n",a[maxi].alph,a[maxi].n); 39 a[maxi].n=0;//输出数据后重新初始化 40 maxi=0; 41 } 42 else break;//最大值等于0的时候结束输出 43 } 44 return 0; 45 }