本帖最后由 恋梦 于 2015-2-8 00:27 编辑
从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数
废话不多说,直接上代码 ,这绝对全是我自己写的,给你看是想让你借鉴,不是让你抄,零基础中有很多没讲到的地方,就比如数组排序,我这是给你个思路,如果有例子了,还照抄,你就算混进黑马,也跟不上学习进度另外,如果这个真的对你有帮助了,别忘了再顶一下。
- #include <stdio.h>
- [hide=d30]#include <stdio.h>
- // 计算字符出现次数的声明
- int jishu(char name[], char a);
- int main()
- {
- // 1.提示用户输入一个一大推字符串
- printf("请连续输入任意字符\n");
-
- // 2.定义一个变量保存用户输入的字符
- char name[100];
-
- // 3.接收用户输入的字符串,默认在100以内包含空格
- scanf("%[^\n]", name);
-
- // 4.定义结构体用来保存A,B,C,D出现的次数和A,B,C,D的标识
- struct test {
- int n; // 保存出现的次数
- char c; // 标明这个出现的次数是什么字符
- };
-
- // 5.定义4个数组,并初始化相应的出现的次数和字符
- struct test array[4] = {
- {jishu(name, 'A'),'A'}, // 调用jishu函数计算A出现的次数和标明这个字符是A
- {jishu(name, 'B'),'B'}, // 调用jishu函数计算B出现的次数和标明这个字符是B
- {jishu(name, 'C'),'C'}, // 调用jishu函数计算C出现的次数和标明这个字符是C
- {jishu(name, 'D'),'D'}}; // 调用jishu函数计算D出现的次数和标明这个字符是D
-
- // 6.将存放有A,B,C,D的array数组进行排序
- for (int i = 0; i<3; i++) // 最外层的循环表示要循环三次,两两比较最后一次不需要比较
- {
- for (int j = 0; j<3-i; j++) // 每一次循环中都和前一个数值相比
- {
- // 用数组元素字符出现的次数和前一个数组元素出现次数比较,如果小于就交换,降序
- if (array[j].n < array[j+1].n)
- {
- // 能来到这里说明条件成立,将这个时候的array[j]元素的值赋予一个新的值a
- struct test a = array[j];
-
- // 将array[j+1]的值给array[j]这个地方
- array[j] = array[j+1];
-
- // 最后将a的值给array[j+1],完成交换
- array[j+1] = a;
- }
- }
- }
-
- // 7.此时含有A,B,C,D的array数组已经完成排序,打印采用循环,共打印4四
- for (int i = 0; i<4; i++)
- {
- // 先打印出现的字符号,再打印出现的次数
- printf("%C出现了%d次", array[i].c, array[i].n);
- }
- // 程序结束为0,完美退出
- return 0;
- }
- // 定义一个计数的函数要求传入一个字符串数组和一个要求计算的字符
- int jishu(char name[], char a)
- {
- // 定义一个变量用来保存被传入字符出现的次数,初始化为0
- int n = 0;
-
- // 遍历字符串,将每个字符拿出
- for (int i = 0; name[i]!='\0'; i++)
- {
- // 如果拿出的每一个字符等于这个传入的字符就将这个次数+1
- if (name[i]== a)
- {
- // 每进入一次这里,说明这个字符出现一次,将出现的次数累积
- n++;
- }
- }
- // 将运算完传入字符出现的次数返回出去
- return n;
- }
复制代码 |