我自己一个一个字母敲得代码。 是一道入学考试题:
输入一组大写字符串,要求找出ABCD出现的次数并按照出现次数由高到低输出代码如下:
- #include <stdio.h>
- #include <string.h>
- //定义一个全局结构体变量abcd,
- struct abcd
- {
- int count;//统计次数
- char c;//对应的字母
- };
- int ifCapital(char *c, int length);
- void statistics(char *c, int length);
- void sort(struct abcd *p, int n);
- int main()
- {
- //随机输入一组大写字符串,然后统计ABCD出现的次数,并且结果按照次数大小进行输出
- //定义一个整型变量存储字符串长度
- int length = 1;
- //定义一个数组变量存储用户输入的字符串
- char str[100] = "a";
- //验证用户输入的是否是大写字符串,不正确重新输入
- while ( ifCapital(str, length) )
- {
- printf("请输入一组大写字符串:\n");
- scanf("%s", str);
- length = strlen(str);
- }
- //统计ABCD出现的次数,并且结果按照次数大小进行输出
- statistics(str, length);
- return 0;
- }
- //函数:字符串不全是大写或者为空时,返回1
- int ifCapital(char *c, int length)
- {
- for (int i = 0; i < length; i++)
- {
- if(c[i] > 90 || c[i] < 65)
- {
- return 1;
- }
- }
- return 0;
- }
- //函数:统计str中ABCD出现的次数,并将统计结果按次数大小排序并输出
- void statistics(char *str, int length)
- {
- int a = 0, b = 0, c = 0, d = 0;//定义变量abcd分别存储ABCD出现的次数
- for (int i = 0; i < length; i++)
- {
- switch (str[i])
- {
- case 'A':
- a++;break;
- case 'B':
- b++;break;
- case 'C':
- c++;break;
- case 'D':
- d++;break;
- default:
- break;
- }
- }
- //定义一个结构体数组,存放字母和其对应的统计次数
- struct abcd abc[4];
- abc[0].count = a;abc[0].c = 'A';
- abc[1].count = b;abc[1].c = 'B';
- abc[2].count = c;abc[2].c = 'C';
- abc[3].count = d;abc[3].c = 'D';
-
- sort(abc, 4);
-
- }
- //给结构体abcd进行排序并输出
- void sort(struct abcd *p, int n)
- {
- struct abcd temp;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n - i - 1; j++)
- {
- if (p[j].count < p[j+1].count)
- {
- temp = p[j];
- p[j] = p[j+1];
- p[j+1] = temp;
- }
- }
- }
- for (int i = 0; i < n; i++)
- {
- printf("%c字母出现次数为:%d次\n", p[i].c, p[i].count);
- }
- }
复制代码
|