当前课程知识点:C语言程序设计(上) > 数组(二) > 5.8 二维字符数组 > 5.8 单词排序
大家好
我们接下来学习
前边呢我们已经
遇到过说
可以把字符放在
一维数组里边
使这个字符呢
不一个一个去处理
变成一串一串去处理
这样感觉到非常的方便
那我们要把字符
放在一个二维数组里边
那岂不成了说
一串一串又一串的这样处理
因为二维数组是一行一行又一行
的确是这样
它会使字符处理
变得非常的方便
那怎么做这件事情呢
定义
首先是char一个数组
变成字符型的数组
那么
行下标列下标
对这样的东西的初始化
我们前边也
已经讨论过一维数组的初始化
二维数组
那你有几个行下标
你就可以给
几个行去做初始化
这里边只有一个要注意的
我们定义了三行
那我们是最多使用到三行
下标不要越界
还有列下标也是一样
我们最多是8个字符
大家一定不要忘了
给结束标记留一个位置
所以最长的这个串
是7个字符
如果这里边省略了
那我们以三个串
来定位它是
三行六列的这么一个数组
那对a数组
这样初始化完了
它在内存里的样子
是这样子
是
每一行
是一个串
如果我们现在这样看
把这个二维数组看成一个一维数组
这样看
那这个一维数组里边是
一个元素 两个元素 三个元素
那每一个元素
是什么呢
是一个串
所以从这个意义上说
我们其实呢
这一串一串的字符在内存里
也是这样线性的存放的
然后呢
我们把它
一串看成是一个元素的话
那它的这个
元素的首地址
就是我们现在说的
a0 a1 a2
每一行上
那么
我们有了它
就可以使
对字符的处理
变得非常方便
我们通过三个输出
就是printf的调用
来看它的方便之处
我们看第一个
从0到2
在循环体里做什么呢
printf
printf什么呢
三个s格式
就做三次
s格式
每一次对应的
ai
那么从0开始
a0 a1 a2
那这个标识什么呢
从ai开头的
这不是一个地址号吗
我们说如果是在一维数组里边
那它就是一个数组元素
而在二维地址里边
它是第i行的行首的地址
那这个s是说
你从这个行首的地址开始
一直到它的斜杠0结束
把这个串输出
把这个
ai开始的这个串输出
那这个循环进行了三次
就输出了三个串
那这个循环里边
对着的
不是s格式了是c
所以后边是什么呢
后边是aii
第i行第i列
0行0列
1行1列
2行2列
对角线上的元素都输出来
一个元素一个元素说
对应的百分号c
那我们通过这个是想说什么呢
一个二维数组里的
任何一个元素
你也是可以访问到的
你既可以一串一串的访问
用百分号s的格式
你也可以一个一个的访问
用百分号c的格式
和具体的
行列下标
去访问
而这个呢
是通过什么去访问呢
通过行首的地址
从某一个地址开始
到结束标记为止
而这个呢
一个一个访问
就与那个结束标记没有关系了
那我们再看第三种
是这样百分号s
后边呢
这取的是谁呢
取
这一个行这一个列的
从这个位置
我们指定了一个位置
哪个位置
第i行第i+1列的
这个元素的位置
把它的地址号拿到
从这个地址开始
到斜杠0结束
输出这个串
如果我们这个s的位置上
不是s是c
那大家想想
这一块应该
有这个取地址运算吗
就应该没有了
如果这是c
这就没有
不能有这个取地址运算了
因为它要的就是这一个元素
而我们这是一个串
对的串格式
我们要一个地址号
从这个地址号到结束的
所有的字符
通过这个我们看见了
在一个二维数组里
放上字符
那么它的使用
就会变的
把一个
按行和列访问的事情
变成了一个非常简单的
一串一串
就像是我们在
访问一个一维数组一样
下面我们看一个例子
怎么做呢
输入5个单词
你把它们按照
字母的顺序
字母的顺序就是
abc这样的顺序
那三个单词
第一个单词如果一样
后边的再按abc这样的顺序排
排列以后并且输出
比如说
这么一个
5个字符
那么我要排
我们看一下按第一个字符去排的话
那肯定是d最小了
它排在最前边
而这两个w一样
一样那比第二个
第二个谁小
i小
那这个win肯定排在
words的前边
排好的序应该是这样子
要做这么一件事情
那怎么做呢
我们看
思路是不是这样
5个单词
那我这个外边的循环一定是
进行了5次
从0到4
进行5次
每一次循环里边我们做什么呢
两个串做比较啊
比较
你应该在哪个位置上
找到自己的位置
然后到那个位置上去
那我们在找位置这件事情上
一定也是要循环的
因为我不是找一个
比如说我这个do
我需要跟win比
也需要跟scanf比
也需要跟printf比
所以这里边也是在做
一个循环
那么有了这个思路
我们看一下
用什么方法做呢
其实这种排序
可以用很多方法
我们可以用一个
考虑一个插入的算法
这样的排序算法
来做这件事
也就是说
拿到一个去比
找它自己的合适位置
一个一个比
比到
比如说我们要从小到大排序
你比我大吗
比我大我就要往前插
前边还有比我大的吗
比我大再往前插
这样一个一个往前走
一直找到自己合适的位置
那这个合适的位置是
别人往后移
你才能插进去
是这样的一个状况
好了
那我们
来看一下
这个代码
大家看一下这个程序
我们在这个程序里边
给了一个
二维数组
5乘15的二维数组
还给了一个
15个元素的一维数组
都是给的是字符的
那在这个一开始进入循环之前
我们就先给这个二维数组里边
读了一个字符串
一个百分号s对应的一个串
读进去了
然后呢
进入循环以后呢
我们又给
这个一维数组里边
读了一个串
那现在是
二维数组里的第一行上有一个串
还有一维数组里边的
这个temp里边有一个串
我们在这里边做什么呢
看一下
用了一个
字符串处理函数
这是什么函数呢
大家还记不记得
字符串比较
比较的是
我们刚才读进来的
这个二维数组里边的
这个串
和temp这里边的串
进行
这两个串进行比较
比较出来呢
谁大谁小我们是以0为标记的
大于0
小于0
等于0
等于0的时候是它两个串相等
大于0小于0
分别表示它们的大小
那这是
while的
判断的条件
在这个条件里边
如果说
你找到了自己的合适位置
要做的话
我们现在是怎么做呢
用的什么呢
复制
字符串复制的
这样的一个函数
把后边的这个串的
位置上的
那个串
复制到前边这个位置上来
每做一次
j减减
往后退一个
在这个循环体完成了以后
那么
当前这个串
一定找到了自己的位置
一定找到了自己的位置
最后
做一个最终的
位置上的一个
复制
那把这个循环
循环完了
5个串都找到了
自己的位置
我们把这个程序
运行一下大家看一下
我们给咱刚才说的那几个
串
第一个是words
第二个是do
然后还有一个win
还有一个scanf
还有一个printf
我们看排好的序是
排好了
这个程序里边就是说
我们大家注意是这样子
我们定义的是一个
两维数组
可是
我们在使用的过程里边
大家看
我都是以一维数组的方式
来使用的
这个words
都是用一维数组的方式
来使用的它
这边也是一样的
用一维数组的方式
使用了这个
这个二维数组
那么有关这方面的例子呢
还有很多
大家的那个
给的作业里边也有一些
大家下去可以自己再做一些练习
-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