00:00
同学们,我们再来看第14套题的设计题。我们把这道题呢,把这道题的。呃,要求先把它放过来。我们新建一个文件。新建一个文件,取个名字EXAM14杠零三。放这哈。把后缀进行一个修改,把题拿过来,那首先呢,我们还是对这道题进行一个阅读理解,他要做一件什么事情,我们来看一下。他的提议呢,是这样子的。规定输入的字符串中只包含字母,还有星号,看懂了哈。编写一个函数放它的功能是什么呢?使字符串最前面连续的信号不得多于N个。就是说如果多于N个的话呢,它就把多余的星号删掉,若少于或等于N个,则什么都不做。其实说这个题,但这个N大家看到这个N是个变量哈,这道题大家有没有发现,其实就是对一个字符串的修改。
01:08
过滤掉或者要删除掉多余的信号,而且只是前面的这一部分,那这里他给了一个题,他给了一个什么题呢?他说字符串中的内容。假如是这个。他说,假如这样一个字符串。N。假如为四。假如为四,那么他说删除过后,字符串的内容应该是变成这个样儿的。那为什么是这样子的呢?大家看前面的星号一共有几个?大家数一数,12345677个,而你给的这个N呢,等于四,显然。多大于四了,大于四过后呢,它就会删掉多余的保留四个信号后面的部分不动,为什么大家说了,他说。而字符串中间和尾部的信号不用删除。
02:02
原封不动,那也就是说后面的这一部分的内容呢,咱们直接给它放上去就可以了。他又说了,如果N等于八,如果N等于八的话呢,则字符串中内容仍然为这个字符串,为什么呢?因为你前面有七个信号,而我输入的N是八,八大于七就保留。所谓的信号。这里他还说了什么呢?N的值在主函数中输进去,在编写函数时不得使用C语言提供的字符串函数,也就是说必须自己完成,你不能说,诶说老师那这个地方很简单嘛,我直接调用string。使点H这个头文件里面的一些系统函数来完成,不是一下就完成了吗?说了不允许用。就是说相当于这个处理呢,要我们自己来完成,而不能用系统的函数,最后呢,他要求不允许改动主函数和其他函数的任何内容。
03:06
那现在呢,我们就来分析一下,首先我们来做对这个做一个分析。嗯,这道题的题意是干什么呢?这道题此题哈,此题的功能就是对一个输入的字符串,字符串进行一个处理。去掉,去掉多余的星号。啊,然后呢,然后啊,然后这个修改注意啊,它嗯,去掉多余的信号过后呢,它改变的是原先这一个字符串并。啊,并覆盖给并重新重新覆给覆给原来的。啊,原来的字,原来的这一个字符数组。啊,或者字符串啊。
04:01
付给原来的字符数组吧,啊,字符数组就这么一个意思。那第二个,那这样子的话,我们解题的思路也就比较清晰了,我说一下我解题的思路,解题的思路和步骤,我说说。我理一下这个思路。我们。根据这个题,我们第一步应该怎么做呢?大家看一看,因为这里他说了我们这个星号的个数如果是小于N。小于N的话呢,不做任何处理,大于N才做处理,所以说我们第一步要统计,统计出什么呢?统计出字符串。最前面的星号。星号的个数。是不是比如说我们用S来保存,假如我们用S来保存,那有了这样一个思路过后呢,我们再来做第二个思路。如果。
05:06
如果S它大于N,则怎么样呢?则删除多余的心。信号是不是,那我问同学们第二个问题,如果我们统计出来过后这个N。对,如果S它小于等于N怎么办呢?则不做处理,是不是不做处理啊?按照他的提议,就是不做处理,能理解吗?那问题在哪里呢?这边最难的地方就是当S大于N的时候,你怎么删除多余的信号呢?我的思路是这样子的,大家看,待会我准备这么做,比如说你原先有一个A,你看啊,有个A这样的一个指针指向一个字符串,它前面呢,有这样一些符号,比如说有。
06:01
有这么多信号啊,假设比较多,然后后面有个A又来一个星号,再来一个B,再来两个星号,假如是这样子的。其实说白了,现在我们要干什么呢?就是要把这个A字符串里面多余的信号删掉,假如我们这个N等于几呢?假如等于四。假如等于四,那我怎么做呢?我准备这么做,我先做一个临时的数组B。对B,我先把这里面呢,需要的信号拷贝过来,比如说你是四个吧,现在你有七个多了,我只拷贝四个信号过来,1234拷过来,拷过来过后呢,再把后面的这一部分。再把后面的这一部分也拷贝过来,比如说A。新。必星星。也就是说,当这样处理完毕过后呢,B这一个指针或者这个数组哈,所指向的字符串就是我们要的结果,然后你人家说了看到没有,它是以星号的方式返回的。
07:10
那这个时候呢,我们还要想办法把这个B里面内容再重新拷贝回这个,或者叫覆盖,覆盖这一个A数组就完事了,能理解了吗?其实我的思路就这样子的。就是我我先统计信号有多少个,如果大于N了,我就把我就拷贝需要的个数的信号拷贝到B这个临时数组里面,再把后面的部分也拷贝过来,最后再把B里面的内容重新覆盖给。覆盖A数组,这个A呢,就变成我们需要的。内容了,能理解了吧,我把这个图先截取一下,因为后面呢,我需要这个图。我拷贝到这里来。先把它放在这里,待会儿呢,我有用。思路我就分析到这儿,下面呢,我们走下代码第三步。
08:01
走代码。走下代码。好的,那代码呢,我们就开始这样来编写了啊,同学们跟上老师思路。首先我们先定义一些变量,先定义一个临时数组,差B等于81,同学们看,现在为什么我定一个81呢?大家理解吗?因为你S数组最多是81个,所以说我临时数组呢,大小要定位跟它一样,临时数组大小和S一样。81能理解啊。然后呢,我们定义一些对,我们定义一些循环变量,循环变量和我们需要的S,那老师就不啰嗦了,I等于零,I等于解啊,解也等于零。J等零,然后呢,S也等于零,还有一个K初始化可以不写,这些呢都是用来做循环变量的,好,这边我们都应该写成逗号,而不能写成分号,对不对?写成分号就错了。
09:06
好的,把这个做完以后,下面我们来先完成第一件事情,干什么呢?统计。前面信号出现多少个,这个难不难?其实这个挺简单,一个while循环就可以了,跟着老师思路while语句。SI等于,如果它只要,它只要等于星号。然后呢,我们就做一个工作,做一个什么工作呢,各位S加加。看懂了没有,姐,佳佳。对,诶,不是节加加啊,是I加加,是不是这样完了过后同学们想S是不是就统计出来了,嗯,应该是S已经统计到了。有多少个信号?还有一点大家有没有发现,当退出while循环后,注意听好退出while循环后,请问I指向哪里?I指向指向了哪里?
10:03
指向什么地方呢?这个时候大家一定要分析出来,当你退出这个Y循环钩,I就指向我们原始数组里面第一个不是星号的下标。及这个A能理解吗?因为待会儿我们刚好可以从这个位置开始拷贝。对,这样一定分析出来I就指向了,诶,就是这个S这个数组。宿主。就是这个S数组,或者这这个叫A数组吧,因为你挪过来过后,这个就是A了吗?就是指向A数组。的第一个非。非星号。元素。呃的下标能理解吧,这个待会儿会有用的,好,那现在呢,这个完成以后我们就要判断了,因为说了如果S大于这个星号,我们就做处理,是这样子的吧,那开始写代码。这道题是有一定难度的,S大于N。
11:03
来了,如果S大于N,我们就做处理,否则不做处理是不是?否则我们直接干什么呀,连什么都不干,说白了。是不是如果S它不大于N,实际上你什么都不用做。对不对,所以说我们这只处理S大于N,如果S小于等于零,则什么都不做,所以说里面的代码呢,全部写到if里面就可以了,那怎么做呢?根据刚才的分析,首先我们先把这个需要的信号先拷贝过来,对,先拷贝。N个N个星号给谁呢?给我们的临时数组。这个大家能读懂吗?临时速度哪一个呀?B难不难,一点都不难,负循环就完事了,K等于零,K小于N是不是小于N了,K加加,然后拷贝进去,实在是太简单了,一个B结为这个时候同学们啊,因为这个节B呢,它需要有一个指针,有一个变量来表示它下标,所以说我们用节来控制的,再说一遍啊。
12:12
这个地方我们用节使用,使用变量节来干什么呢?表示其下标。你不能再用I了,也不能用再用其他的了,要分开。B节等于什么呢?哎,B节就等于一个星号,能理解不同时怎么样结加加。好,当这个for循环结束以后,我们就拷贝了N个星号到B这个临时数组里面去,下面接着来说,是不是下面就应该将将什么呢?将我们A数组的A数组后面的内容内容考一次。依次拷贝到哪里去呢?还是拷贝到B数组中,能理解不?那这个太简单了,一句话就行了,怎么写?
13:05
呃,对吧,要动脑筋呢,Y循环是不是我一直拷贝,只要你这个I,现在是不是I,我们刚才已经讲了,I已经指向了非星号的下标,所以说I只要它不等于零,是不是这样子的。这个能看懂吗?因为我们数组结束的时候,它有它有一个什么呀,一个这样的,其实这个就是零值。只要它不等于斜杠零,我们就不停的去做这个工作,是不是好,那下面代码呢,咱们就写成B。注意听哈,B结等于嘛呢,B解等于AI能看懂吧,付给他了,付给它过后结加加。I也要加,加两个都要加好,此时此刻这段代码呢?我们就把A数组后面的内容。拷贝到了必收之中。
14:00
没有任何问题,紧接着继续往下走,你把这个拷贝完了过后,同学们想一想是不是要分尾啊,对,然后给给B数组一个结束标志,这个很重要哦,结束标志。别墅标志是斜杠零吗?我们在前面讲高校大学生课程的时候说的很清楚,B应该怎么写呢?B节等于斜杠零。结束标记,此时此刻我们待会儿呢,是不是还要拷贝回去啊,我们还有工作,还要把B下面的工作来了。将什么呢?将这个B数组重新重新拷贝给哪里呢?给这个A数组好上来过后先把A。这个I和节再重新制下零,因为现在I节呢,已经不再是零了,我们要重新治一下,治一下就完事,完事了,Y循环就可以了,什么呢,B节。
15:03
只要B它不等于零,是不是我们就往里面扔就行了呀,往里面扔怎么扔呢?一样的道理,跟刚才一样,怎么写呢?Aii现在已经等于零了,等于什么呢?B节。是不是在一个个往里面考了呀。解,拷进去,拷进去过后呢?I加加结加加能理解吗?最后这个Y循环结束以后再给什么呢?给我们的A数组,A数组一个一个结束标志。标志是什么呢?七杠零能理解不,那就I哪一个呢?你看下边我这忘了一个。A的下标是用I来控制的,那这边就是I了。给他来一个徐杠铃。表示结束,代码写完了。代码就写完了。能理解不?其实说到底就几部曲吗?就是根据老师刚才这个分析的S大于零怎么怎么做,其实就是刚才老师画的这个示意图的一个代码实现,就是先把前面的N个新拷贝到B里面去,再把后面这些东西拷贝过来,最后再将这个整体拷贝回去,当然你在进行这个处理的时候,一定要有斜杠零哈,如果你没有斜杠零的话,那。
16:20
这个代码就这个字符数组就会出问题,因为我们知道字符数组它是以斜杠零表示结尾的,明白这个意思吧,同学们,代码咱已经写完了,但是这个代码写的对不对我们不知道,我们需要来进行验证一下,来各位朋友来验一下。God,唱一下。输入两个概率X。验一下我们的代码到底O不OK,最后再多说一句,同学们,在你实际写代码的时候,你不需要写这些竖式,老师讲课是希望同学们能听懂,所以说我写一些注啊,你在实际呃,做二级考试的时候,没有必要写这么写,写这么多注释好不好?
17:02
来运行。运营起来。那运营运营起来过后呢,我们用哪个数据来测试呢?咱们就用他给的这两个字符串来测试,这样是最安全的。好,复制一下,因为人家已经把答案告诉你了,你就知道对不对嘛,来粘贴一下。回车。再说一个是不是啊,OK,诶,同学们看,跟我们想的一样吗?当然是一样的了。当然是一样的,来,我们再来测一个,他说呃,我们输的这个是他,然后输的是一个八,我们看看会怎么样好不好,再来运行一下。各位朋友,我再来粘贴。然后这次呢,我们输一个八,如果是八的话呢,前面所有的信号,七个信号会全部保留。是不是the string after delete就删除过后呢?还是它应该一模一样答案正确?到时我们这道题的分析还有解答就做完了。说实话,这道题是有一定难度的。
18:08
为什么说如果这道题对专业,就是咱们学C语言,做专门做C语言开发的来说呢?很简单,但是对。就说咱们刚刚接触编程的同学来说,还是有一点绕,所以这道题呢,其实是有难度,但是你突破了以后,把这道这道难题都突破了以后,你再做其他的题就一马平川了,因为你以高对低嘛。就你把难的题都会做了,那简单的题自然不在话下。同学们,这道题我就给大家分析到这里,梳理一下。能理解我的思路哈,放这,这是分析及解答。分析和解答。放好,然后他的这个示意图我也给大家放到里面去,这有个示意图拿到这来。鉴定思路是不是在这里说如如何删除这有个思路,我把这个图呢放这。
19:02
这说的就很清晰了。最后,我们把第14道题也整理到我们的笔记中去,便于同学们今后的复习。放一下,这是我们的第14套题。第14道题呢,是一套上机体。放好。把图片拿过来啊。把14道题的图片拿过来。好的。然后呢,我把试卷整理到这里,C语言真题第14套试卷。写好试卷。好的,来一个小箭头。便于我们今后的一个阅读。放入一个表格。好,我把整个试卷拿一下。从这开始复制一下。往下拉。好好,我觉得这分析的过程有点长啊,最后一道题稍微复杂一点。
20:01
然后我把它放到这里来。OK。带个三种。带格式拷拷贝一下好,现在呢,图片也都拿过来了。啊,你看这边图片也有哈。各位同学,那关于这一讲的讲解呢,我们就到这就第14道题,大家消化一下。
我来说两句