第四章小结
第四章的串,说实话,学的不是很好,相比于前两章来说。在第一道模式匹配那里卡很久,后来发现它没有那么复杂,最后一个点就是运行超时,用的BF算法,后来我又换了KMP算法,最后一个测试点过了,第二个没过,然后,就不知道该如何解决了。就是没有完全做对。
而稀疏矩阵那道题,我一开始看到的时候,以为三元组又是一个矩阵,后来老师讲了之后,又查了一下百度关于三元组表示稀疏矩阵的内容才知道要用两个结构体打包去做。一开始的错误是在结构体的表示那里,编译错误。那个结构体里的data 数组的第i个没有表示清楚。
上一学期结构体的知识。
第二个就是查询数据k是否存在及输出行列号的表示上。
我一开始只能写出一个存在的输出,用循环和if语句,常常会伴随着多个ERROR的输出。
for(int i=0;i<A.N;i++) { if(k==A.data[i].v) { cout<<A.data[i].i<<" "<<A.data[i].j; break; } }
int flag=0; for(i=0;i<A.N;i++) { if(k==A.data[i].v) { cout<<A.data[i].i<<" "<<A.data[i].j; flag=1; break; } else flag=0; }
后来经同学的指点,改正,用了flag,才得到了正确的输出格式。
AI那道题,我照着老师的思路来,就卡在了输出格式那里,最后一个can you 的转换也没有完全对,但至少我知道要怎么去实现它。而且,还知道要关注越界的问题,这是以前没有很注意的地方。学到老师的(j==0||isAlone(j-1))的巧妙化解j是第一个字符的越界。还有防止最后一个字符的越界,对s[i]!=’\0’的考虑。
还有,提交的时候,我犯的几个错误。1.括号的位置。2.isPuntuation()函数的实现内容的错误
在写can you 替换成I can 这一段的时候,判断整个can you的独立我一直都没写对,后来参考了博客园里别人的代码,才发现要用括号整个括起来才对,这样的整个的独立性的判断才合理
修改前:
if(t[j]=='c'&&t[j+1]=='a'&&t[j+2]=='n'&&(j==0||isAlone(j-1))&&isAlone(j+3)&&t[j+4]=='y'&&t[j+5]=='o'&&t[j+6]=='u'&&isAlone(j+7))//把独立的can you 换成I can { cout<<"I can"; j=j+7; continue; }
修改后:
-
if(t[j]=='c'&&t[j+1]=='a'&&t[j+2]=='n'&&t[j+3]==' '&&t[j+4]=='y'&&t[j+5]=='o'&&t[j+6]=='u' &&((j==0||isAlone(t[j-1]))&&isAlone(j+7)))//把独立的can you 换成I can
{
cout<<"I can";
j=j+7;
continue;
}
在实现IsPuntuation(char c)的时候,判断是否为标点符号,我自作聪明的在if语句里还加了一个c==’\0’的判断,导致第一个测试点中,对于结尾有空格这里格式错误。我的理解是,跳过了结束符,结尾的空格符就不能消除,在这个if的判断中。这也是参考别人的代码之后修正的,后来自己理解了一番,想清楚是怎么回事。
if(t[j]==' '&&isPuntuation(t[j+1]))//下一个为标点符号,不输出 { ++j; }
bool isPuntuation(char c)//判断是否为标点符号 { c=tolower(c); if(c>='0'&&c<='9'||c>='a'&&c<='z'||c==' ')//修改前为if(c>='0'&&c<='9'||c>='a'&&c<='z'||c==' '||c=='\0') return false; else return true; }
对于上一章的目标,我觉得自己没有很好的完成,不管是做作业,还是看书方面,都没有很好的完成。所以接下来,以我目前的水平,我还是觉得自己先把课本中的知识学会了并且巩固,再去做其他的拓展。接下来的目标依旧是做好复习预习课本知识,做题的时候至少知道怎么debug.