新人自学关于字符串strstr的理解,也不知道对不对。
新人自学,很困惑,以下是自己本人的理解,也不知道我理解的对不对,希望大家指导下哈。环境:win8.1 VS2010 char * __cdecl strstr ( const char * str1, const char * str2 )
{
char *cp = (char *) str1; //要对char *str1进行指针操作,所以设置另一个指针变量*cp,指向char *str1的起始位置//
char *s1, *s2; //在对char* str1和char *str2操作的时候,创建char *s1和char *s2,分别表示该两个指针上的指针变量 ///
if ( !*str2 ) //第一种大情况:char *str2是空指针的时候,无论char *s1是否是有效指针,都返回char *s1//
return((char *)str1);
while (*cp) //第二种大情况:当char *s1是有效的指针的时候。要对char *str1进行指针操作,所以这里用指向char *str1的指针变量*cp,而不能用*str1//
{
s1 = cp; //s1表示对char *str1操作时候的指针变量。不能用s1 = str1,因为char *str1是不变的,需要指向char *str1的指针变量即可///
s2 = (char *) str2; //s2表示对char *str2操作时候的指针变量//
while ( *s1 && *s2 && !(*s1-*s2) ) //①当两个指针变量*s1和*s2都为真的时候,*s1和*s2两个指针变量指向的字符相同,找到了子串///
s1++, s2++; //继续寻找下一个//
if (!*s2) //②当*s1为真,*s2为假的时候,没找到子串。返回*str1指向的地址,即*cp。但是这里能用return str1吗?///
return(cp);
cp++; //记录找到第一对相同字符的地址,地址自增继续寻找下一对相同的字符。///
}
return(NULL);
}