1.函数功能
我们来看看相关网站对它的解释
翻译一下就是:strstr函数会返回字符串1中字符串2的起始位置,如果没有,就返回0。这是一个类似于找字串的函数。
2.模拟实现
基本思路是这样的:首先定义两个指针分别指向str1和str2的起始位置,同时我们还需要一个额外的指针来记录成功匹配的位置,成功时返回它(strstr函数返回的类型是字符指针)。
两个指针从头开始遍历,如果相等,str2就加1继续匹配下面的字符,如此一来,当碰到str2的/0时就会退出循环,这时候返回str1指向的位置下标即可。
但要是不匹配成功呢,如果一次不匹配成功,这是我们额外的指针就派上用场了。这里设为cp,每当匹配不成功时,cp就加1,从下个位置继续开始匹配(如果每次都从头匹配,可能还没达到相等的位置就已经匹配不成功了),这是str2要归零,所以不能直接用str2来遍历,一旦字符串过长时,就会丢失起始位置。为了方便,用是s1,s2来代替str1和str2来遍历,每次匹配不成功就让s1指向cp的位置开始匹配直到匹配成功,返回cp的位置下标。
代码语言:javascript复制char* my_strstr(const char* str1, const char* str2)//返回的是从cp位置开始后面的字符串
{
char* cp =(char*) str1;
char* s1;
char* s2;
if (!*str2)
return ((char*)str1);//如果str2为空,直接返回str1
while (*cp)
{
s1 = cp;
s2 = (char*) str2;
while (*s1 && *s2 && !(*s1 - *s2))
{
s1 ;
s2 ;
}
if (!*s2)
return (cp);
cp ;
}
}
int main()
{
char str1[] = "abbbbcdef";
char str2[] = "bbc";
char* ret = my_strstr(str1, str2);
printf("%s", ret);
return 0;
}