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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 恋梦 中级黑马   /  2015-2-7 23:50  /  6096 人查看  /  52 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 恋梦 于 2015-2-8 00:27 编辑

从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数
废话不多说,直接上代码 ,这绝对全是我自己写的,给你看是想让你借鉴,不是让你抄,零基础中有很多没讲到的地方,就比如数组排序,我这是给你个思路,如果有例子了,还照抄,你就算混进黑马,也跟不上学习进度另外,如果这个真的对你有帮助了,别忘了再顶一下。
  1. #include <stdio.h>
  2. [hide=d30]#include <stdio.h>

  3. // 计算字符出现次数的声明
  4. int jishu(char name[], char a);

  5. int main()
  6. {
  7.     // 1.提示用户输入一个一大推字符串
  8.     printf("请连续输入任意字符\n");
  9.    
  10.     // 2.定义一个变量保存用户输入的字符
  11.     char name[100];
  12.    
  13.     // 3.接收用户输入的字符串,默认在100以内包含空格
  14.     scanf("%[^\n]", name);
  15.    
  16.     // 4.定义结构体用来保存A,B,C,D出现的次数和A,B,C,D的标识
  17.     struct test {
  18.         int n; // 保存出现的次数
  19.         char c; // 标明这个出现的次数是什么字符
  20.     };
  21.    
  22.     // 5.定义4个数组,并初始化相应的出现的次数和字符
  23.     struct test array[4] = {
  24.         {jishu(name, 'A'),'A'}, // 调用jishu函数计算A出现的次数和标明这个字符是A
  25.         {jishu(name, 'B'),'B'}, // 调用jishu函数计算B出现的次数和标明这个字符是B
  26.         {jishu(name, 'C'),'C'}, // 调用jishu函数计算C出现的次数和标明这个字符是C
  27.         {jishu(name, 'D'),'D'}}; // 调用jishu函数计算D出现的次数和标明这个字符是D
  28.    
  29.     // 6.将存放有A,B,C,D的array数组进行排序
  30.     for (int i = 0; i<3; i++) // 最外层的循环表示要循环三次,两两比较最后一次不需要比较
  31.     {
  32.         for (int j = 0; j<3-i; j++) // 每一次循环中都和前一个数值相比
  33.         {
  34.             // 用数组元素字符出现的次数和前一个数组元素出现次数比较,如果小于就交换,降序
  35.             if (array[j].n < array[j+1].n)
  36.             {
  37.                 // 能来到这里说明条件成立,将这个时候的array[j]元素的值赋予一个新的值a
  38.                 struct test a = array[j];
  39.                
  40.                 // 将array[j+1]的值给array[j]这个地方
  41.                 array[j] = array[j+1];
  42.                
  43.                 // 最后将a的值给array[j+1],完成交换
  44.                 array[j+1] = a;
  45.             }
  46.         }
  47.     }
  48.    
  49.     // 7.此时含有A,B,C,D的array数组已经完成排序,打印采用循环,共打印4四
  50.     for (int i = 0; i<4; i++)
  51.     {
  52.         // 先打印出现的字符号,再打印出现的次数
  53.         printf("%C出现了%d次", array[i].c, array[i].n);
  54.     }

  55.     // 程序结束为0,完美退出
  56.     return 0;
  57. }
  58. // 定义一个计数的函数要求传入一个字符串数组和一个要求计算的字符
  59. int jishu(char name[], char a)
  60. {
  61.     // 定义一个变量用来保存被传入字符出现的次数,初始化为0
  62.     int n = 0;
  63.    
  64.     // 遍历字符串,将每个字符拿出
  65.     for (int i = 0; name[i]!='\0'; i++)
  66.     {
  67.         // 如果拿出的每一个字符等于这个传入的字符就将这个次数+1
  68.         if (name[i]== a)
  69.         {
  70.             // 每进入一次这里,说明这个字符出现一次,将出现的次数累积
  71.             n++;
  72.         }
  73.     }
  74.     // 将运算完传入字符出现的次数返回出去
  75.     return n;
  76. }
复制代码

点评

十分感谢…  发表于 2015-2-17 23:40

评分

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

查看全部评分

52 个回复

正序浏览
思路很重要
回复 使用道具 举报
大家加油哈
回复 使用道具 举报
很厉害啊
回复 使用道具 举报
这还不好,加强了你的知识掌握
回复 使用道具 举报
不错不错
回复 使用道具 举报
nice,上次遇到这个题目,没有做出来
回复 使用道具 举报
bieny 发表于 2015-3-14 01:48
请问楼主第二行代码中的[hide=d30] 是做什么用的?

无任何作用,是我将代码复制到黑马论坛上,自动生成的
回复 使用道具 举报
bieny 中级黑马 2015-3-14 01:48:04
45#
请问楼主第二行代码中的[hide=d30] 是做什么用的?
回复 使用道具 举报
我的也是这个
其实想做好也不容易
回复 使用道具 举报
恋梦 发表于 2015-2-18 00:25
视频为主,书不好理解,完全没视频上的快。

是啊,之前我先看书,然后再看视频,发现进度好慢,而且书上的东西有时老师都不讲,可能后续用不到吧
回复 使用道具 举报
楼主棒棒哒
回复 使用道具 举报
superdite 发表于 2015-2-17 17:50
也是零基础自学 ,还在学C,看完楼主的题,感觉压力山大啊
请教下楼主,你自学是完全看视频还是也同时看书 ...

视频为主,书不好理解,完全没视频上的快。
回复 使用道具 举报
superdite 发表于 2015-2-17 21:23
是看黑马的IOS基础视频中的那些吗?

嗯,除了这个视频,我还没有找到过讲的比这个还好的了。
回复 使用道具 举报
恋梦 发表于 2015-2-17 18:25
书基本上没看,只不过一有不会的题,就翻书。

是看黑马的IOS基础视频中的那些吗?
回复 使用道具 举报
superdite 发表于 2015-2-17 17:50
也是零基础自学 ,还在学C,看完楼主的题,感觉压力山大啊
请教下楼主,你自学是完全看视频还是也同时看书 ...

书基本上没看,只不过一有不会的题,就翻书。
回复 使用道具 举报
也是零基础自学 ,还在学C,看完楼主的题,感觉压力山大啊
请教下楼主,你自学是完全看视频还是也同时看书的?
回复 使用道具 举报
vera 中级黑马 2015-2-13 10:14:04
36#
有一些是没有在视频中出现过的,十分感谢。这道题又有了一个思路。
回复 使用道具 举报
还没到这步呢 !
回复 使用道具 举报
谢谢,受教了!
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马