鱼C论坛

 找回密码
 立即注册
查看: 1124|回复: 7

[已解决]怎么统计一个字符串数组中各个字符的出现次数

[复制链接]
发表于 2020-11-20 12:23:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
PTA上的题 想不出来了 百度也搜不到
输入样例:Having an active youngster about the house can be quite wearing.
输出:
-->10
.-->1
H-->1
a-->6
b-->2
c-->2
e-->7
g-->3
h-->2
i-->4
n-->5
o-->3
q-->1
r-->2
s-->2
t-->5
u-->4
v-->2
w-->1
y-->1
最佳答案
2020-11-20 12:43:24
本帖最后由 jackz007 于 2020-11-20 12:44 编辑
  1. #include <stdio.h>
  2. int main(){
  3.     char c[100];
  4.     gets(c);
  5.     {
  6.             int d[127] = {0} , k                                                ;
  7.             for(k = 0 ; c[k] ; k ++) d[c[k]] ++                                 ;
  8.             for(k = 1 ; k < 127 ; k ++) if(d[k]) printf("%c-->%d\n" , k , d[k]) ;
  9.     }
  10.     return 0;
  11. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. Having an active youngster about the house can be quite wearing.
  4. -->10
  5. .-->1
  6. H-->1
  7. a-->6
  8. b-->2
  9. c-->2
  10. e-->7
  11. g-->3
  12. h-->2
  13. i-->4
  14. n-->5
  15. o-->3
  16. q-->1
  17. r-->2
  18. s-->2
  19. t-->5
  20. u-->4
  21. v-->2
  22. w-->1
  23. y-->1

  24. D:\0002.Exercise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-20 12:28:42 | 显示全部楼层
  1. #include <stdio.h>
  2. int main(){
  3.     char c[100];
  4.     gets(c);
  5.     {

  6. /* 请在这里填写答案 */

  7.     }
  8.     return 0;
  9. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 12:43:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-11-20 12:44 编辑
  1. #include <stdio.h>
  2. int main(){
  3.     char c[100];
  4.     gets(c);
  5.     {
  6.             int d[127] = {0} , k                                                ;
  7.             for(k = 0 ; c[k] ; k ++) d[c[k]] ++                                 ;
  8.             for(k = 1 ; k < 127 ; k ++) if(d[k]) printf("%c-->%d\n" , k , d[k]) ;
  9.     }
  10.     return 0;
  11. }
复制代码

        编译、运行实况:
  1. D:\0002.Exercise\C>g++ -o x x.c

  2. D:\0002.Exercise\C>x
  3. Having an active youngster about the house can be quite wearing.
  4. -->10
  5. .-->1
  6. H-->1
  7. a-->6
  8. b-->2
  9. c-->2
  10. e-->7
  11. g-->3
  12. h-->2
  13. i-->4
  14. n-->5
  15. o-->3
  16. q-->1
  17. r-->2
  18. s-->2
  19. t-->5
  20. u-->4
  21. v-->2
  22. w-->1
  23. y-->1

  24. D:\0002.Exercise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 12:53:54 | 显示全部楼层
jackz007 发表于 2020-11-20 12:43
编译、运行实况:

有点看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 13:00:22 | 显示全部楼层


         很简单啊,ASCII 码一共有 127 个字符,所以,就定义一个有 127 个元素的数组来统计各个字符出现的次数,数组的下标索引就是字符的 ASCII 编码数值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 13:14:37 | 显示全部楼层
本帖最后由 癞蛤蟆丶ccc 于 2020-11-20 13:16 编辑
jackz007 发表于 2020-11-20 13:00
很简单啊,ASCII 码一共有 127 个字符,所以,就定义一个有 127 个元素的数组来统计各个字符 ...


第一个for 判断条件a[k]  还有那个d[c[k]]++      这几个看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 13:26:42 | 显示全部楼层
癞蛤蟆丶ccc 发表于 2020-11-20 13:14
第一个for 判断条件a[k]  还有那个d[c[k]]++      这几个看不懂

      for 中的判断条件 c[k] 其实就是在检测字符串结束标志 '\0',这个标志的 ASCII 编码就是 0,其实,也就是整数的 0,作为逻辑表达,如果 c[k] 数值不为零,那么 c[k] 就是真,否则为假;
      循环中,c[k] 是一个字符,这个字符本身有一个数值,就是它的 ASCII 编码,所有字符的 ASCII 数值在 0 ~ 127 之间,所以,c[k] 其实也是一个数值介于 0 ~ 127 之间的整数,那么,c[k] 代表一个字符,d[c[k]] ++ 其实就是对应这个字符的数组元素值加 1。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 13:42:00 | 显示全部楼层
jackz007 发表于 2020-11-20 13:26
for 中的判断条件 c[k] 其实就是在检测字符串结束标志 '\0',这个标志的 ASCII 编码就是 0,其实, ...

大佬牛逼 你这三行代码 佩服佩服
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-9 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表