A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。

调试了一下午 终于弄出来了, 开心 分享下~ 有什么BUG欢迎各位提出

  1. #include <stdio.h>


  2. int main()
  3. {
  4.     char *str = NULL;     
  5.     int arr[] = {0, 0, 0, 0};
  6.     int i, j;
  7.     int temp;
  8.     int a, b, c, d;

  9.     a = b = c = d = 0;
  10.     str = (char *)malloc(255);
  11.     gets(str);

  12.     // 统计A B C D 出现次数, 并分别计数
  13.     // a  b c d 分别统计A B C D 的个数
  14.     // 将A B C D的个数分别赋值给数组元素
  15.     while(*str != '\0')
  16.     {
  17.         switch(*str)
  18.         {
  19.             case 'A':
  20.             arr[0]++;
  21.             a++;
  22.             break;

  23.             case 'B':
  24.             arr[1]++;
  25.             b++;
  26.             break;

  27.             case 'C':
  28.             arr[2]++;
  29.             c++;
  30.             break;

  31.             case 'D':
  32.             arr[3]++;
  33.             d++;
  34.             break;

  35.             default :
  36.             break;
  37.         }
  38.         str++;
  39.     }
  40.    // printf("a = %d, b = %d, c = %d, d = %d \n", a, b, c, d);      for Debug

  41.    // 将数组中A B C D 按出现个数从大到小排列
  42.     for(j = 0; j < 4; j++)
  43.     {
  44.         for(i = 0; i < 4-j; i++)
  45.         {
  46.             if(arr[i] < arr[i+1])
  47.             {
  48.                 temp = arr[i];
  49.                 arr[i] = arr[i+1];
  50.                 arr[i+1] = temp;
  51.             }
  52.         }
  53.     }

  54.     /*  Debug Start
  55.     for(i = 0; i<4; i++)
  56.     {
  57.         printf("%c = %d", 'A'+ i, arr[i]);
  58.     }
  59.     printf("\n");
  60.     Debug End */

  61.     // 依次判断从大到小出现个数是那个字母,并打印在屏幕上(即判断a[0](最大)与a,b,c,d比较相等就打印出来)
  62.     for(i=0; i<4; i++)
  63.     {
  64.         if(arr[i] == a)
  65.         {
  66.             printf("A-%d ", arr[i]);
  67.             a++;
  68.         }
  69.         else if(arr[i] == b)
  70.         {
  71.             printf("B-%d ", arr[i]);
  72.             b++;
  73.         }
  74.         else if(arr[i] == c)
  75.         {
  76.             printf("C-%d ", arr[i]);
  77.             c++;
  78.         }
  79.         else if (arr[i] == d)
  80.         {
  81.             printf("D-%d ", arr[i]);
  82.             d++;
  83.         }
  84.     }

  85.     free(str);
  86.     return 0;
  87. }
复制代码

2 个回复

倒序浏览
记录出现次数简单,后面按出现次数由高到低输出字母确实有点难度

用数组记录出现次数,再用4个变量再记录一次,数组排序后,跟这4个变量比较来控制输出顺序,好思路。
回复 使用道具 举报
Nicholas_Chow 发表于 2015-4-10 16:09
记录出现次数简单,后面按出现次数由高到低输出字母确实有点难度

用数组记录出现次数,再用4个变量再记录 ...

还有一个问题哦... 那就是相等的情况. 我就被这个问题卡了很久很久.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马