第一:一定要仔细,真的,昨天不知道是哪里写错了,导致我用一天的时间都没把这个简单的问题用程序写出来
第二:切记做任何算法之前一定要先判断合法否,不合法可直接不予处理,节省很多时间和空间
第三:界限非常重要,切记上下界限
按照书上的实现:
int index(char *s,char *t, int pos)
{
int i,j,len1=0,len2=0;
while(s[len1]!='\0')len1++;
while(t[len2]!='\0')len2++;
printf("%d\n%d",len1,len2);
if(pos<0||pos>len1||pos>len1-len2+1)
{
printf("Can't do this operation!\n");
return 0;
}
i=pos-1;j=0;
while(i<len1&&j<len2)
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=len2)
{
printf("OK~~~~");
return i-len2+1;
}
else
{
printf("sorry~~~~");
return 0;
}
按照我的实现:
我只是多加了一句判断是否已经对比结束,若是则直接成功推出,不用进行后面的操作,其实效果一样,不影响什么,之所以我加了这一句就是昨天以为书上的是错的,自己写了一下,就出现了自己的版本,其实还是一样的思想:
while(i<len1&&j<len2)
{ while(s[i]==t[j])
{
i++;
j++;
if(t[j]=='\0')
{
printf("OK~~~~");
return i-j+1;
}
}
i=i-j+1;
j=0;
}
printf("sorry~~~~");
return 0;
}
仅仅只是纪念自己的辛酸,因为昨天一天竟然因为不仔细,全耗在这么几句上了,昨天真的好受打击