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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a380vs747` 中级黑马   /  2015-3-24 15:47  /  1007 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 题目: 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由
  3. 高到低输出字母和出现次数。
  4. */

  5. #import <stdio.h>


  6. // 首先typedef一个结构体,包含名字和计数。
  7. typedef struct
  8. {
  9.     char name;  //名称(A、B、C、D)
  10.     int count;  //计数次数
  11. } Letter;       //结构体名

  12. int main()
  13. {
  14.     char s[100] = {'\0'};         // 定义一个字符串数组,用来接收输入的字符串
  15.    
  16.     printf("请输入一大堆字符串:");  // 提示输入
  17.     gets(s);                      // 获得字符串,赋值给s(这里不能用scanf)
  18.    
  19.     Letter letter[4] = {{'A',0},{'B',0},{'C',0},{'D',0}};  //初始化结构体数组。
  20.    
  21.     for (int i = 0; s[i] != '\0'; i++)
  22.     {
  23.         switch (s[i])
  24.         {
  25.             case 'A':
  26.                 letter[0].count += 1;          //分别计数出现的次数
  27.                 break;
  28.             case 'B':
  29.                 letter[1].count += 1;
  30.                 break;
  31.             case 'C':
  32.                 letter[2].count += 1;
  33.                 break;
  34.             case 'D':
  35.                 letter[3].count += 1;
  36.                 break;
  37.             default:
  38.                 break;
  39.         }
  40.     }
  41.    
  42.     for (int j = 0; j <= 3; j++)       // 双循环,冒泡进行排序,按照计数变量从大到小,将结构体数组重新排序
  43.     {
  44.         for (int k = 0; k <= 3-j-1; k++)  // 这里应该是k<=3-j-1,一开始没有-1,导致输出结果不对(好久没看c,都忘了)
  45.         {
  46.             Letter change;             // 定义第三方变量,用以调换数组中两个变量的值。
  47.             if (letter[k].count <= letter[k+1].count)
  48.             {
  49.                 change = letter[k];
  50.                 letter[k]= letter[k+1];
  51.                 letter[k+1] = change;
  52.             }
  53.         }
  54.         
  55.     }
  56.    
  57.     printf("字母出现次数由高到低排列:\n");
  58.    
  59.     for (int m = 0; m <= 3; m++)       // 从letter[0]开始打印就可以了。
  60.     {
  61.         printf("字母%c出现%d次\n",letter[m].name, letter[m].count);
  62.     }
  63.    
  64.    
  65.     return 0;
  66. }

复制代码



评分

参与人数 1技术分 +2 收起 理由
Micro + 2 很给力!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马