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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 斑马 中级黑马   /  2014-6-22 21:21  /  1677 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 斑马 于 2014-6-23 09:31 编辑
  1. </blockquote></div><div><div class="blockcode"><blockquote>#include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.         char str[]="";                  //定义一个字符串
  6.         printf("请输入任意字符串:\n");            //提示用户输入
  7.     scanf("%s",str);                       //接收字符串
  8.     int A,B,C,D;
  9.            A = 0; B = 0; C = 0; D = 0;     //A,B,C,D的值初始化
  10.    
  11.            for (int i = 0; i<strlen(str); i++) {     //遍历整个字符串
  12.         if (str[i] == 65) {                 //判断str[i]是否是A所对应的ASCII值
  13.             A++;                            //如果是A的值加1
  14.         }
  15.         if (str[i] == 66) {                  //B,C,D以此类推
  16.             B++;
  17.         }
  18.         if (str[i] == 67) {
  19.             C++;
  20.         }
  21.         if (str[i] == 68) {
  22.             D++;
  23.         }
  24.         
  25.     }
  26.    
  27.     printf("A出现%d次\nB出现%d次\nC出现%d次\nD出现%d次\n",A,B,C,D);
  28.     return 0;
  29.    
  30. }
复制代码


需求是:从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。
现在只做到了,计算字母出现的次数,排序问题还没解决,另外我觉得计算字母次数的代码好像有点冗余,是不是还可以再精简一点?
求大神斧正.

14 个回复

倒序浏览
第一行不知道怎么搞的,出现乱码了,其实就是#include <stdio.h>
大家帮忙看看呗
回复 使用道具 举报
你说的排序,是排这4个,还是怎么地。我觉得计算代码可以呀。
回复 使用道具 举报
for循环里面是不是可以改用while  然后用switch呢?这样子代码会不会好点。
回复 使用道具 举报
完美世界 发表于 2014-6-23 11:13
你说的排序,是排这4个,还是怎么地。我觉得计算代码可以呀。

就是这四个字母出现频率有高到低排出来
回复 使用道具 举报
秋天的悲伤 发表于 2014-6-23 11:28
for循环里面是不是可以改用while  然后用switch呢?这样子代码会不会好点。

你是说把if改成while语句?
回复 使用道具 举报
空格本来就代表一个字符,而空字符串直接为"\0"。scanf(%s,&str);应该加上取地址符。
精简的话用switch语句:char z[4];
scanf(%s,&z);
switch (z){case 65:printf("次数%d,字母%s",A,str[i]);break}一次类推
回复 使用道具 举报
if语句可以改一下,改成if()..else if(),这样形式的,这样前面的执行了后面的if语句就不用判断了。 还有就是你说的排序问题,字母出现的次数和字母的名字没有关联,排起来会很烦琐。 建议使用结构体类型把这两种数据关联起来,排序和输出就会简单多了。我也没多想,你试试看行不。
回复 使用道具 举报
斑马 中级黑马 2014-6-24 00:53:11
9#
完美世界 发表于 2014-6-23 21:59
if语句可以改一下,改成if()..else if(),这样形式的,这样前面的执行了后面的if语句就不用判断了。 还有就 ...

好的,谢谢啦,我还没看到结构体的视频呢,等我看到了我试试看~
回复 使用道具 举报
代码哟点问题哦!
回复 使用道具 举报
艾力达 发表于 2014-6-24 00:59
代码哟点问题哦!

目前除了无法实现排序,暂时没发现有什么问题啊?
回复 使用道具 举报
nanzu 中级黑马 2014-6-24 01:00:21
12#
小问题                  
回复 使用道具 举报
chain 中级黑马 2014-6-24 01:20:37
13#
给你一点小提示,使用冒泡排序,然后想办法跟字母对应,先自己想想,嘿嘿,你懂得
回复 使用道具 举报
把找1个字母在文章中出现的次数封装成一个函数(for循环不用多讲吧),把整形数组的排序封装成一个函数(这个太简单不封装也行)主函数随便写写就行了。数组排序可参考http://850361034.blog.163.com/blog/static/32803809201431871010434/
回复 使用道具 举报
斑马 发表于 2014-6-23 17:23
你是说把if改成while语句?

改成switch() case: 。。。。的形式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马