strstr这个库函数看到这个名字大概率猜不到这是什么函数,
但经过学习就可以很好的认识到这个函数

可以看到此函数是用来寻找一个字符串中是否含有另一个字符串
代码示例:
int main()
{
char str1[] = "abbbbcd";
char str2[] = "bbc";
char* ret = strstr(str1, str2);
printf("%s\n", ret);
return 0;
}
结果:

s1与
s2分别作为子串与主串用来遍历的指针,再创建一个
ret的指针用来返回参数
ret所指向的字符串不为空,因为
ret是用来返回找到字符串后的开始遍历地址,若是空字符串就没必要判断。
while循环,相同则两
指针++,直到两方不相等,此时跳出循环,我们需要判断跳出的
s2指针是否是
0,
ret++,因为当前的ret已经不可能是子串在主串的起始位置。
重置s1与s2指针
char* my_strstr(const char* str1, const char* str2)
{
char* s1 = str1;
char* ret = str1;
char* s2 = str2;
assert(str1 && str2);
while (*ret)
{
s1 = ret;
s2 = str2;
while (s1 && s2 && *s1 == *s2)//防止解引用到空指针
{
s1++;
s2++;
}
if (*s2 == 0)
return ret;
ret++;
}
}
int main()
{
char str1[] = "abbbcdef";
char str2[] = "bbc";
printf("%s\n", my_strstr(str1, str2));
return 0;
}
欢迎纠错与讨论