- /**
- * 7、 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)
- */
- #include <stdio.h>
- #include <string.h>
- #define lenth 100
- int countA,countB,countC,countD;//创建四个存放统计结果的全局变量
- /**
- * 字符出现次数统计
- *
- * @param s 需要统计的字符串
- */
- void count(char *s){
-
- // 创建一个for循环
- for (int i = 0;i<lenth; i++) {
- switch (s[i]) {
- case 'A':
- countA++;
- break;
-
- case 'B':
- countB++;
- break;
-
- case 'C':
- countC++;
- break;
-
- case 'D':
- countD++;
- break;
- default:
- break;
- }
- }
- }
- /**
- * 冒泡排序:从大至小排序
- *
- * @param bu 需要排序的数组
- * @param len 需要排序的数组长度
- */
- void bubble (int bu[],int len){
- int temp = 0;
- //冒泡排序-大->小
- for (int n = len; n>0; n--) {
- for (int i = 0; i<len-1 ; i++)
- {
- temp = 0;
- if (bu[i] < bu[i+1])//判断条件是前者小于后者
- {
- temp = bu[i];
- bu[i]=bu[i+1];
- bu[i+1]=temp;
- }
- }
- }
- }
- /**
- * 匹配一次数字,并进行输出
- *
- * @param target !排序后!的数组
- */
- void output (int target[]){
- for (int i = 0; i < 4; i++) {
- if (target[i] == countA) {
-
- printf("\nA出现次数为%d",countA);
- countA = -1;
-
- }else if (target[i] == countB){
-
- printf("\nB出现次数为%d",countB);
- countB = -1;
-
- }else if (target[i] == countC){
-
- printf("\nC出现次数为%d",countC);
- countC = -1;
-
- }else if (target[i] == countD){
-
- printf("\nD出现次数为%d",countD);
- countD = -1;
-
- }
- }
- }
- int main(int argc, const char * argv[]) {
- countA = countB = countC = countD = 0;//初始化这四个变量
- char text[lenth]={0};//初始化数组
- printf("RIDP Solution\n");
- printf("Please input your text here:");
- fgets(text,sizeof(text),stdin);//接收键盘输入的字符串
- count(text);//调用统计方法
- int res[4]={countA,countB,countC,countD};
- bubble(res, 4);//排序
- output(res);//输出
- return 0;
- }
复制代码
对于这道题我是这样解答的,为了看起来方便所以定义了三个方法,分别用于统计,排序和输出,参见响应注释
从键盘获取文字我使用的是fgets(),记得这个方法是比较安全的获取键盘输入内容的方法
TIP:
1、记得先初始化临时数组,防止垃圾数据影响统计结果
2、记得修改冒泡排序的内容,从而让其从大到小排序
3、输出方法中记得修改统计结果到任意负值,避免重复影响统计结果
注意:
1、冒泡排序处,记得条件是lenth-1,不是lenth,我当时没发现这个错误结果导致输出结果神秘的少了一位,想起某大师说过的“喝口茶冷静一下”
于是去冷静了一下,后来才发现这有问题
2、输出部分,切记不要忘记修正原先的统计结果
3、如果使用我的解题思路,你需要把统计结果声明为全局变量=,=
4、虽然有点较真,但是题目中要求统计ABCD而不是A,a,B,b,C,c,D,d,故,条件设置为了四个大写字母
5、嘛,如果出现次数相同,默认输出顺序为A-B-C-D
|