先说一下strstr函数吧。
strstr是查找字符串函数,下面是它的格式:

先上主函数部分
int main()
{
  char* p1 = "abbbcdf";
  char* p2 = "bbc";
  char* ret = my_strstr(p1, p2);//my_strstr
  if (ret == NULL)//遍历p1后都没有找到p2
  {
    printf("未找到字串\n");
  }
  else
  {
    printf("%s\n", ret);
  }
  return 0;
}然后是my_strstr的函数实现
char* my_strstr(const char* str1, const char* str2)
{
  //使用assert(断言)函数,保证指针的有效性-assert(p!=NULL)
  assert(str1);
  assert(str2);
  char* s1 = (char*)str1;
  char* s2 = (char*)str2;
  char* pc = (char*)str1;
  while (*pc)//使用pc指针对str1所指向的字符串进行遍历
  {
    if (*str2 == '\0')
    {
      return (char*)str1;
    }
    while (*s1 && *s2 && (*s1 == *s2))
    {
      s1++;
      s2++;
    }
    if (*s2 == '\0')
    {
      return pc;
    }
    pc++;
    s2 = (char*)str2;
    s1 = pc;
  }
  return NULL;
}然后画图讲解一下

整体代码如下
char* my_strstr(const char* str1, const char* str2)
{
  assert(str1);
  assert(str2);
  char* s1 = (char*)str1;
  char* s2 = (char*)str2;
  char* pc = (char*)str1;
  while (*pc)
  {
    if (*str2 == '\0')
    {
      return (char*)str1;
    }
    while (*s1 && *s2 && (*s1 == *s2))
    {
      s1++;
      s2++;
    }
    if (*s2 == '\0')
    {
      return pc;
    }
    pc++;
    s2 = (char*)str2;
    s1 = pc;
  }
  return NULL;
}
int main()
{
  char* p1 = "ab43464";
  char* p2 = "b43";
  char* ret = my_strstr(p1, p2);
  if (ret == NULL)
  {
    printf("未找到字串\n");
  }
  else
  {
    printf("%s\n", ret);
  }
  return 0;
}









