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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 恋梦 中级黑马   /  2015-2-7 23:50  /  6170 人查看  /  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 个回复

倒序浏览
卧槽 牛人啊
回复 使用道具 举报
先顶,再看
回复 使用道具 举报
唉,几年不学C,编程题是硬伤啊!
回复 使用道具 举报
厉害啊。。。
回复 使用道具 举报
我的也是这个。,你是怎么用代码的格式放到贴子上的。求教
回复 使用道具 举报
Micro 发表于 2015-2-8 10:11
我的也是这个。,你是怎么用代码的格式放到贴子上的。求教

回复 使用道具 举报

就是在你回复的那个<>这个就是代码
回复 使用道具 举报
恋梦 发表于 2015-2-8 10:20
就是在你回复的那个这个就是代码
  1. 真的耶。非常感谢。一直没发现。
复制代码
回复 使用道具 举报
这个题不难,难的不是这个题
回复 使用道具 举报
都是大神啊
回复 使用道具 举报
我测试基础时候有这个题 和你比起来写的,我可能写的不具体~ 牛人啊
回复 使用道具 举报
牛逼啊  牛人到处都是啊 让我们这些个菜鸟如何混
回复 使用道具 举报
楼主零基础吗  准备了多长时间?  我刚学到集合  有点吃力啊
回复 使用道具 举报
想运行看看结果,这题目。。。
回复 使用道具 举报
流弊啊,、、、、、感觉自己好弱
回复 使用道具 举报
谢谢楼主的分享哈。。
回复 使用道具 举报
Aily 发表于 2015-2-8 13:46
楼主零基础吗  准备了多长时间?  我刚学到集合  有点吃力啊

彻彻底底的零基础,从正式学习c编程到现在一个月多点,c和oc现在视频全看完了
回复 使用道具 举报
恋梦 发表于 2015-2-8 14:14
彻彻底底的零基础,从正式学习c编程到现在一个月多点,c和oc现在视频全看完了 ...

请问面试中有多少内容是视频里没有的,自己该如何补充?
回复 使用道具 举报
devhackill 发表于 2015-2-8 17:07
请问面试中有多少内容是视频里没有的,自己该如何补充?

我没面试过,我不知道,我只做到了基础测试题,基础测试题中,即使你把零基础所有的题都会了完完全全的会了,也不可能达到10分,除非你抽到的都是简单的题,就比较有些就需要数组排序,冒泡法就非常适合数组排序和一些其他的方法就不一一列举了,其实最好的办法就是买本比较系统的书,视频上有的,书上可以略略看一下,没有的再细细的看,不过这不是重点,重要要放在oc上面,毕竟做的是oc的开发
回复 使用道具 举报 1 0
123下一页
您需要登录后才可以回帖 登录 | 加入黑马