当前课程知识点:C语言程序设计(上) > 数组(二) > 5.9 数组综合应用 > 5.9.3 应用3——统计字符
大家好
我们再来看一道
关于数组应用方面的
一道例题
统计字符的频数
这也是很有趣的一道题
就是说
我们从键盘上在敲
不断的到里边敲
我们想统计什么呢
你敲进去的
哪个字符出现了多少次
a出现多少次
9出现了多少次
包括什么呢
键盘上你有可能碰到
ctrl
shift
这样的不可显示的字符
也要一并统计
那么
这个思路是什么呢
我们键盘上这么多键
一共多少呢
跟ASC码对应的
有128个
都是我们
显示的
不能显示的
都是我们有可能敲进去的
那我们
难不成要设128个计数器
来计它吗
这样显然是
那是没法实现的
而且没法把这128个计数器
搁在我们的循环体里边去写
那怎么办呢
最简单的思路就是说
每个字符
我们要敲进去的这个字符
和我们
这个ASC码表
有一个非常好的对应关系
是什么呢
一个字符
就对应着一个ASC码值
那这样
我们是不是可以这样想
我们设一个数组
这个数组
就有128个元素
每一个
元素的下标
就记录它所对应的
那个ASC码的字符
那这个思路就是说
我们做一个计数器的数组
这个数组有128个元素
每一个元素对应的
比如说128
它就对应的
自己所对的那个字符
那这个思路下来
我们看看程序是不是这样
定义一个数组
然后呢我们
在这里边
char了一个
line
是200
也就是说我们敲的字符
可以是200这么长
那我们
给这个line里边获取的字符
用gets
获取字符
然后我们就做什么呢
while里边是line k
不是斜杠0吗
就你刚才敲进来的
内容
里边
到斜杠0为止
那我们
怎么去给它计数呢
count里边
我们用谁
作了count的下标
用line
那line是什么呢
是我们刚才敲进来的字符
比如说我们敲进来10个字符
那10个字符
里边
不一定都是什么
有标点符号
有字母
那10个字符的每一个
现在就作了
我这个
count的
下标
用它来
加加
比如说我碰到的第一个字符
是
一个数字6
那么6所对应的
那个ASC码值
就成了它的下标
所以呢
就给它计数
再谁来完成这个事情
while
然后呢
后边是什么呢
最后
for
里边
输出的是
每一个
count
这个元素
所输出的
就是它记录的这个字符的个数
所以呢我们现在在这
比较有意思的是
用line k加加
line这个数组的每一个元素
作了count的下标
我们运行一下这个程序看一下
我们看
刚才大家说的
它比较有意思的是
count的下标
用了一个数组元素
作另一个数组的下标
我们从键盘上
现在随便输进去一些
不超过200的
回车
大家看
现在统计下来说
4敲了一次
一个
d敲了4个
每一个
字符
敲了多少个
这个都是在它的对应的计数器里边
把它记录出来了
我们看那个
用单引号引起来的
就是这个
也就是说
我们把谁引起来呢
把这个字符本身
这样就省的
因为我们不是变量
大家再看一下
我们再来给重复的多一些
比如说
我送进去的是
然后呢再送进去的
大家看
我们刚才这个数字
1送进去4个
2送进去5个
3送进去7个
那这个程序
我们要说的其实就是
有一个
方法
是
数组元素可以作
另一个数组的下标
而这个
数组元素里边
还用了一个k加加
同时作了计数器
所以呢这个程序
大家是值得下去
把它看一下
尽管是
没有几行
但是它比较好的利用了
数组
它的本身的一个特长
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html