从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。
调试了一下午 终于弄出来了, 开心 分享下~ 有什么BUG欢迎各位提出
- #include <stdio.h>
- int main()
- {
- char *str = NULL;
- int arr[] = {0, 0, 0, 0};
- int i, j;
- int temp;
- int a, b, c, d;
- a = b = c = d = 0;
- str = (char *)malloc(255);
- gets(str);
- // 统计A B C D 出现次数, 并分别计数
- // a b c d 分别统计A B C D 的个数
- // 将A B C D的个数分别赋值给数组元素
- while(*str != '\0')
- {
- switch(*str)
- {
- case 'A':
- arr[0]++;
- a++;
- break;
- case 'B':
- arr[1]++;
- b++;
- break;
- case 'C':
- arr[2]++;
- c++;
- break;
- case 'D':
- arr[3]++;
- d++;
- break;
- default :
- break;
- }
- str++;
- }
- // printf("a = %d, b = %d, c = %d, d = %d \n", a, b, c, d); for Debug
- // 将数组中A B C D 按出现个数从大到小排列
- for(j = 0; j < 4; j++)
- {
- for(i = 0; i < 4-j; i++)
- {
- if(arr[i] < arr[i+1])
- {
- temp = arr[i];
- arr[i] = arr[i+1];
- arr[i+1] = temp;
- }
- }
- }
- /* Debug Start
- for(i = 0; i<4; i++)
- {
- printf("%c = %d", 'A'+ i, arr[i]);
- }
- printf("\n");
- Debug End */
- // 依次判断从大到小出现个数是那个字母,并打印在屏幕上(即判断a[0](最大)与a,b,c,d比较相等就打印出来)
- for(i=0; i<4; i++)
- {
- if(arr[i] == a)
- {
- printf("A-%d ", arr[i]);
- a++;
- }
- else if(arr[i] == b)
- {
- printf("B-%d ", arr[i]);
- b++;
- }
- else if(arr[i] == c)
- {
- printf("C-%d ", arr[i]);
- c++;
- }
- else if (arr[i] == d)
- {
- printf("D-%d ", arr[i]);
- d++;
- }
- }
- free(str);
- return 0;
- }
复制代码 |
|