//////模拟实现strstr

////(字符中的元素是连续存放的,所以不会存在跳动存放的情况,例如a1="ababcd",a2="ac"此结果就是NULL)

////情况1.arr1="abcd"arr2="abc"(一次匹配就找到了)

////情况2.arr1="ababcd"arr2="abc"(多次匹配才能找到)

//#include <stdio.h>

//#include <string.h>

//#include<assert.h>

//char* my_strstr(char* str1, const char* str2)

//{

// assert(str1 && str2);//断言是为了保证两个指针有意义

// //设置s1,s2的原因是为了防止改动str1或str2会影响查找时位置的变动,因此提前保存或创建一份

// const char* s1 = str1;

// const char* s2 = str2;

// const char* p = str1;

// while (*p)

// {

//  s1 = p;//为了让s1随p的变动而变动(是为了情况2发生时直接跳过多余操作)

//  s2 = str2;

//  while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)

//  //*s1 == *s2是为了说明此位置的字符相等,然后经过各自的自增去查找后面的是否相等

//  //*s1 != '\0' && *s2 != '\0'是为了说明,找子字符串时都找到末尾了,只能是找到或没找到

//  {

//   s1++;

//   s2++;

//  }

//  if (*s2 == '\0')//*s2 == '\0'是为了说明s2已经全部找到才会等于\0,因此返回p(子字符串所在字符串的第一个字符的位置)

//  {

//   return p;

//  }

//  p++;//当判断此处的情况同于情况2时,就直接进行下一位的匹配,跳过多于步骤

// }

// return NULL;//此处返回的值均为ret的值

//}

//int main()

//{

// char str[] = "This is a simple string";

// char* pch= "simple";

// char* ret = my_strstr(str,pch);//此处的ret的类型char*时声明函数的返回类型,应保持一致

// if (ret == NULL)

// {

//  printf("子字符串不存在于字符串中\n");

// }

// else

// {

//  printf("子字符串不存在于字符串中,为:%s\n",ret);

// }

// return 0;

//}