先总结一下完成实践和作业的具体情况:在完成这一次作业和实践的过程中,我觉得最困难的是编写AI核心代码的程序代码了。对于模式匹配那道作业,因为有先预习过,再加上老师课堂上的详细地讲解过具体思路,总体还是可以写好的,就是存在一些细节问题没有注意到。而在解决稀疏矩阵的时候,不太理解三元组表是如何存放数据的,进行了百度,后来老师上课时也讲了,就理解怎么回事了,当天晚上就进行了操作,但还是卡住了

这里我用了flag=0来标记没有找到相应的元素值,而找到后我将flag赋值为1表示匹配成功,但却没有放在if语句里面,一方面可能因为刚使用不久,不够熟练;一方面主要是自己看代码太少了,更正如下:

       本章存在问题较多的题目(AI核心代码):刚开始看到这个题目的时候,看到要求条件挺多的,脑袋一团糟,没有什么思路。但自己还是鬼使神差地去写了一些,悲哀地发现没有思路去写代码不但行不通,还浪费时间,把自己弄得更乱。

       那天上机时,老师教我们具体解题思路:先总体想明白main()函数里应该进行什么操作,需要什么函数;接着就去一个一个条件的看下去,一个一个的编写成代码。那天,自己看题时没有将条件进行小小的分类,也没有去理清大的要求中还细分的要求,例如:消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;这里可以把消除多余空格处理成一个函数,函数中要实现不同情况的处理:①去掉串首的空字符;②相邻单词的空格由多个变成一个 ;③去掉串尾的空格;④去掉标点符号前面的空格

①去掉串首的空字符,也就是要定位到第一个非空字符。刚开始自己去看题目的时候,只是想着题目:去掉行首的空格,一直紧盯着,不知道转个弯,换个考虑方式,后来听老师讲解,更觉得自己还是得多思考,多从不同的角度看问题。

②相邻单词的空格由多个变成一个:

这里是先将s串一个空字符放到t串中,若接着的s串中的字符还是空字符,就不放入t中,直到s串出现非空格字符,再接着放入t串中去

③去到串尾空字符

刚刚开始的时候,没有意识到这个已经是不再满足循环条件后的处理,以为这样处理怎么知道是不是最后一个字符,然后自己加了个循环,导致怪怪的。而这个的处理是跳出循环后(即将处理完的字符串放到t串中),如果最后一个字符是空字符,则去掉

④处理标点符号的空格,起先自己还真的想过一个一个罗列出来去判断,后来老师教我们从反向思考,就是通过不是标点符号(写得比较少)的判断来实现标点符号的判断,可读性提高,自己看着也不会觉得那么痛苦,还有益于在出错时进行检查

因为标点有挺多的,就使用isAlone这个函数来实现是否是标点符号的判断。因为事先已经在放入了一个空字符,如果下一个是标点符号,那么理应去掉

       还有就是把独立的I和me处理成you等等那些的处理,将?变成!,可以理解,一个字符对一个字符,进行判断后,可以写成  t[i]='!';但是处理其他的,不能像这样那么简单了。刚开始想的时候,也想像处理?那样,发现自己实现不了,而且自己想的不是直接输出来,而是想先把它放到串中,再输出来。讲课的时候,老师那样写还有点不太明白。后来自己去思考,加上请教同学,才清楚这个处理是想通过定位到目标字符,将其位置上的字符处理直接通过cout语句直接输出实现转换,这真的是太神奇了。

        我觉得完成这些题目之前,应该自己多去思考,理清自己需要做的,有个大概的思路,不然真的无从下手,有时候实在没有思路,我觉得可以多去请教同学和老师,多去交流学习,还是很有帮助的。

       上次的目标情况:这一次的作业和实践的完成,好像基本没有去考虑T(n);那个模式匹配出现运行超时,但自己还不是很理解KMP算法,因此也没有去解决超时问题。

       接下来的目标:去继续学习一下KMP算法,也去理解特殊矩阵的压缩存储的基础知识。