鱼C论坛

 找回密码
 立即注册
查看: 1011|回复: 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 编辑
#include <stdio.h>
int main(){
    char c[100];
    gets(c);
    {
            int d[127] = {0} , k                                                ;
            for(k = 0 ; c[k] ; k ++) d[c[k]] ++                                 ;
            for(k = 1 ; k < 127 ; k ++) if(d[k]) printf("%c-->%d\n" , k , d[k]) ;
    }
    return 0;
}
        编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
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

D:\0002.Exercise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 12:43:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-11-20 12:44 编辑
#include <stdio.h>
int main(){
    char c[100];
    gets(c);
    {
            int d[127] = {0} , k                                                ;
            for(k = 0 ; c[k] ; k ++) d[c[k]] ++                                 ;
            for(k = 1 ; k < 127 ; k ++) if(d[k]) printf("%c-->%d\n" , k , d[k]) ;
    }
    return 0;
}
        编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
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

D:\0002.Exercise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

有点看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


         很简单啊,ASCII 码一共有 127 个字符,所以,就定义一个有 127 个元素的数组来统计各个字符出现的次数,数组的下标索引就是字符的 ASCII 编码数值。
想知道小甲鱼最近在做啥?请访问 -> 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]]++      这几个看不懂
想知道小甲鱼最近在做啥?请访问 -> 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬牛逼 你这三行代码 佩服佩服
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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