- /*
- 题目: 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由
- 高到低输出字母和出现次数。
- */
- #import <stdio.h>
- // 首先typedef一个结构体,包含名字和计数。
- typedef struct
- {
- char name; //名称(A、B、C、D)
- int count; //计数次数
- } Letter; //结构体名
- int main()
- {
- char s[100] = {'\0'}; // 定义一个字符串数组,用来接收输入的字符串
-
- printf("请输入一大堆字符串:"); // 提示输入
- gets(s); // 获得字符串,赋值给s(这里不能用scanf)
-
- Letter letter[4] = {{'A',0},{'B',0},{'C',0},{'D',0}}; //初始化结构体数组。
-
- for (int i = 0; s[i] != '\0'; i++)
- {
- switch (s[i])
- {
- case 'A':
- letter[0].count += 1; //分别计数出现的次数
- break;
- case 'B':
- letter[1].count += 1;
- break;
- case 'C':
- letter[2].count += 1;
- break;
- case 'D':
- letter[3].count += 1;
- break;
- default:
- break;
- }
- }
-
- for (int j = 0; j <= 3; j++) // 双循环,冒泡进行排序,按照计数变量从大到小,将结构体数组重新排序
- {
- for (int k = 0; k <= 3-j-1; k++) // 这里应该是k<=3-j-1,一开始没有-1,导致输出结果不对(好久没看c,都忘了)
- {
- Letter change; // 定义第三方变量,用以调换数组中两个变量的值。
- if (letter[k].count <= letter[k+1].count)
- {
- change = letter[k];
- letter[k]= letter[k+1];
- letter[k+1] = change;
- }
- }
-
- }
-
- printf("字母出现次数由高到低排列:\n");
-
- for (int m = 0; m <= 3; m++) // 从letter[0]开始打印就可以了。
- {
- printf("字母%c出现%d次\n",letter[m].name, letter[m].count);
- }
-
-
- return 0;
- }
复制代码
|