//////模拟实现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;
//}