const char* strstr(const char* s1,const char* s2)//找s2在s1中第一次出现的位置,
{
assert(s2&&s1);
const char* p = s1,*r = s2;
while (*p!='\0')
{
while (*p+===*r++);
if (*r=='\0')
{
return p;
}
else
{
r = s2;
p = ++s1;
}
}
return NULL;
}
比如上面这段代码,我读它时一般先通过举几个代表性的例子把它读透。(abcde,cd),(abcarcdv,cd)一步一步在草稿上按照它的流程去模拟。但是等我自己去设计这个函数时就有点不知所然了,写出来的很混乱。还有像数据结构里的一个简单的链表,不仅要知道大体思想,还要注重很细微的,比如指针是否指空,是否超出链尾?......等等很头大,更不用说一些复杂的算法了,要多次用数据去模拟。
记得刚毕业参加面试时,有个面试官问我如何设计大数相乘函数,我没答上来。当他知晓我24岁才毕业时,感觉他也摇了摇头,这说明我的天生iq并不佳,想请教大家作为一个程序员如何锻炼工作需要的细微逻辑计算能力?
跟同学聊天时,了解到他们有的做测试,有的加工数据,说对写程序心里有种畏惧感,其实他们有的在大学里学程序学的也挺不错的。他们的畏惧感我也曾有过,毕竟在大学之前没接触过程序,大二才正式学程序,刚学时由于自以为知晓一些电脑软件的有趣应用和一些it英雄,感觉这个很神奇,但学着学着就产生枯燥感和畏怕,尤其是学数据结构的时候心想每一步都要考虑的这么周密,那该多费脑?!