好 我们现在开始本节课的学习
,那么今天这节课 我们讲的是第17套真题
,那么首先我们看第一个题目
,我们填空题
,那么这个题目里面 这个涉及到我们的字符串数组
,那么也有可能涉及到我们这个结构体和链表等等问题
,那么还是按照我们以前的方法
,第一步打开我们VC软件
,打开软件以后
,通过点击我们的考生文件夹
,把我们的程序拖过来
,拖过来了以后
,我们来看我们代码里面
,那么当前我们要填的空 有这么三个
,这个题目里面 它没有涉及到我们这个结构体和链表
,那么只有我们的字符串
,那么这个里面 它指的是我们这个字符串数组
,那也就是说多个字符串
,那么我们打开这个题目以后
,我们稍微来思考一下
,那么这里面 要填这么三个空
,一个 两个 三个
,我们首先看第三个空
,那么这里有一个strcpy这个函数
,这个函数 它是我们字符串函数
,那么是我们的字符串复制函数
,把后面这个复制到前面这个里面来
,这是我们这个函数
,这第一个
,那么所以我们前面这个ss中括号 k
,那么应该是一个字符串
,然后后面的地方 肯定也得是一个字符串
,那么这第一个空
,我们这地方应该填一个表示字符串的内容
,第二个我们这地方
,那么如果它大于它
,那么后面这个地方要填个什么东西
,那么这里面我们无法确定
,然后再看第一个空 第一个空里面的话
,我们这里有一个1
,那么j 应该这个地方 应该想到它 应该赋初值
,那么就是 我们这三个空
,一起来做
,第一个
,我们这地方是一个赋初值
,那么我们的j赋初值 一般的话 有这么几种情况
,
第一种情况 我们赋值为0
,第二种情况赋值为1
,第三种情况
,那么赋值为i
,那么这几种最常见的情况
,然后后面这个的话
,那么是我们这一个 它们两个比较完了以后
,那么应该后面应该是一个赋值语句
,赋值语句
,那么很有可能跟我们前面的这个k和j
,以及n数组有关系
,第三个
,那么这个地方 刚才已经分析过了
,前面是个字符串 后面那么应该也是一个字符串
,那么这里到底是一个什么样的字符串
,我们其实可以来把这三个语句
,放到一块来看一看
,前面我们学过这个两个数互换位置 这么一个题
,我们在前面基础课程里面都学过
,那例如我们这里是a的值
,这里是b的值
,那么现在如果a里面
,存了一个2
,b里面存了个3
,现在我想要做的事情是 把这个2放到这边来
,这个3放到这边去
,那么像这样一个 这一个互换数据的一个操作
,那我们需要借助于第三个
,我们先把这个2 放到这个里面来
,然后把这个3 给它放过去
,然后把这个2 再放过来
,那么这样才实现我们的3和2互换
,那么在讲这种题目的时候
,我讲过一句话
,叫做等于号的左右两边
,我们各需要出现两次
,那么其实我们通过这个地方来看
,这三条语句
,它跟我们这个两个数互换的这个语句
,其实完全一样的
,由于这个地方 我们的字符串
,字符串是不可以直接用我们的赋值语句来进行赋值的
,那么所以借助于我们的strcpy
,那么所以第三个空这个地方
,我们的答案很明显
,那么应该是我们的t
,那么这里请大家牢记清楚了
,
只要出现两个数互换位置
,那么这个时候 你就马上想到
,等于号的左右两边各出现两次
,什么意思
,刚刚我们讲了ab
,那么应该是把这个a的值
,存到t里面去
,完了以后 把b的值
,这个b的值存到a里面来
,b的值 存到a里面来
,最后一步把这个b的值里面 存一个t
,那么这是我们两个数互换的这么一个方式方法
,那么在这个里面 我们看 一个a 两个a
,一个b 两个b 一个t 两个t
,那么所以我们这里的变量
,应该是左右两边各出现两次
,那么在我们字符串里面 同样的原理
,我们这个t 这里出现了一次
,那么这个地方出现一次
,si这边右边出现一次
,左边出现一次
,右边一次
,左边一次
,那么所以这个空是送分给我们的
,那么根据我们这个数字的原理
,左右两边 各出现两次
,我们能够得到我们这个答案
,那么其他两个答案 相对来说难一点点
,我们就来看一看我们程序
,那么程序的功能是
,这个长短的话 进行排序
,那么s有M个字符串
,那么就相当于是一个二维表格
,这是我们的s 然后这里面有很多串字符串
,一串
,两串
,三串
,四串
,这么多个字符串
,那么现在我们需要做的事情是 把它这个长和短的话排序
,按照我们这个小到大进行排序
,这是我们题目的要求
,那么关于排序
,我们讲过很多题目了
,那么一般都是两个循环语句
,那么前面这个循环语句
,用来控制我们这个整个的长度
,那么例如从第一个开始比
,那么这个的话 应该是当前我们这个地方
,假设我们填的数据 填到这个地方了
,
那么我们第二个循环语句 就从这个地方开始
,然后进行取数
,跟我们前面的来比较
,那就是我们这一个思路
,那明白这个以后
,我们看看这个题目
,它是怎样实现这个功能的
,我们首先来看
,在我们这个主函数里面
,我们有这个二维数组来存储我们多个字符串
,那么一会我们要比较 我们字符串里面这个长度
,来确定它的排序
,然后下面这些语句 我们可以不管它
,那么这里我们通过ss
,把我们的这个多个字符串传递到我们子函数里面来
,那么看这个地方的时候
,我们子函数
,主函数就可以不看了
,来看子函数
,子函数通过我们这个指针数组
,来接收我们这个二维数组
,那么接收完了以后
,我们后面所有的内容
,我们完全可以按照我们这个二维数组来输写就可以
,那么接下来 我们定义了一些变量
,然后这个地方 我们来做了一个事情
,就是统计我们每一个字符串的长度
,这地方看清楚
,这里面我们统计了每一个字符串的长度
,我们所有同学都看一看
,那么编辑统计完了以后
,它把它放到我们这个n数组里面来
,这里面存的是我们的长度
,那么刚刚我们画了一个图二维表格
,那每一行里面 它是一个字符串
,那么这里面 它主要是4个字符
,这5个字符
,3个字符
,6个字符
,那么这个4 5 3 6存到n数组里面来
,这是第一步
,第二步我们来看
,接下来我们就要排了
,那么这里我们i等于0
,i小于M减1
,M的话 是我们整个数组的长度
,整个我们数组的长度
,那么在当前这个地方
,它有多少个数
,我们就测了多少个出来
,就有多少个字符串
,那这里M减1
,这里的话 小于M 那么这里为什么M减1
,那这里面我们明白了是 在我们比较的时候
,
这个地方看清楚
,在比较的时候
,我们最后那一个
,它只有一个了
,那没有必要 拿自己再跟自己来比
,所以我们比的时候
,拿这个跟这个比完就不要比了
,而不需要拿这个和它自己再去比
,那么这个地方 我们减1是这个原理
,然后k等于i 那么k的话
,最开始的时候 它是等于这个没赋值的
,然后这里面 我们k等于i 那么k等于0
,k等于0完了以后
,那for j的话
,那么这里我们来看 这个地方
,那么这个题目 我们明白的是
,它不是拿我们的字符串在比
,而是拿我们字符串的长度
,把它放到n数组里面来了以后
,再来比较的
,那么所以这个就很简单了
,那么我们for j的话等于多少
,那么这个地方 我们想一想
,我们要拿这个n数组里面的数据来比较大小了
,那我是不是拿第一个跟我们第二个来比
,对吧
,我们拿第一个跟第二个比
,拿第二个第三个比 这样比下去
,那么所以我们i等于0的时候
,我们的j是不是应该等于1
,i在这个地方的时候
,我们j应该在这个地方
,那么i在这个地方的时候
,我们的j 应该这个地方 反正要比它后一个
,不然的话 它拿自己跟自己比较了
,那么所以这个地方 我们应该是填一个i+1
,拿我们的这个n0跟我们的n1来比较
,那么这个地方是n0
,跟我们的n1来比较
,那么如果n0大于n1了
,那么接下来我们看题目里面
,它要求的是由这个短到长
,那么也就是说从小到大
,那么如果我们前面这个大于后面这个了
,那么是不是要互换一下
,
那么互换的时候
,我们通过这样的一个语句
,把我们这个最小值 把这个nj里面 现在是最小值了
,把这个最小值的这个序号 存到k里面来
,再看这个地方来
,我们首先是i等于0
,那么k等于0
,那这里我们不要考虑这个i的值了
,直接考虑k的值就可以
,然后j的话 等于i+1
,那么现在我们i等于0
,那么k等于0
,那么j等于多少
,等于1
,那么接下来 我们这个算法是这样的
,拿第一个跟第二个来比
,那么这是第0个 这是第一个
,那么如果我们前面这个 也就是我们这个0个
,大于我们这个一个
,那么它们两个是不是要互换一下位置
,互换一下位置
,那么互换的时候 怎么互换
,我们可以再次拿这个k
,来记录下我们这个j的值
,因为我们这个j 它是最小的值
,这里我们j
,它这是nj里面 存的最小的
,所以把这个当前这个最小的数 它的下标记录下来
,那么完了以后
,如果我们这个k不等于i
,那么如果k不等于i 什么意思
,就是说我们这条语句 它运行过
,只有这条语句运行完了以后
,我们这一个条件 它才能够成立
,因为我们开始的时候 是等于i的
,只要你运行了这个语句
,它才这个不等于i
,那不等于i 说明什么问题
,说明我们前面这个比我们后面这个要大
,我们从小到大排列
,那么所以前面这个比后面这个大
,