[$shared_func_In_main_c] @@check_func_is_exist_ed=float2char_003 #get_global_codes(group_xml,rand1,block_name,ref_complier,extinfo,"float2char_003","float2char",true,"","","","")% ------use=funs_spliter_ruan--------------------- @@check_func_is_exist_ed=my_strstr char* my_strstr(const char* p1, const char*p2)//参照strstr函数原型构建自己的strstr函数 { //assert(p1 != NULL);//断言该指针不为空指针 //assert(p2 != NULL); char*s1 = NULL;//创建一个空指针; char*s2 = NULL; char*cur = p1; if (*p2 == '\0') { return (char*)p1; //如果我们所要找的子串p2为'\0',返回总串的首元素地址 } while (*cur)//cur代表指向的是子串第一次出现的首元素地址 { s1 = cur; //把cur指向字符串的首元素地址赋给s1 s2 = (char*)p2; //把p2指向的首元素地址赋给s2,每一次循环都要从p2的首元素地址开始重新比较 while ((*s1 != 0) && (*s2 != 0) && *s1 == *s2) //只有在s1指向的首元素地址,s2指向的首元素地址都不为'\0'的时候,才可以在总串中找子串的首地址第一次出现的时候 { // 比较s1,s2指向的地址所对应的字符是否相等,若相等,各自指向的地址向后跳一个字节比较下一位是否相等在满足以上的条件下不断循环,若不满足, s1++; //开始一下比较 s2++; } if (*s2 == '\0') //若经过上面的比较,s2指向的内容恰好是'\0',代表找到子串首次出现的地址 { //若不满足以上情况的比较,开始以下比较 return (char*)cur; } if (*s1 == '\0') { return NULL; //若在s2指向的内容不为'\0'时,s1指向的内容率先为0,代表总串长度比子串长度短,必不存在子串,返回一个空指针 } cur++;//代表当前cur指向的并不是子串第一次出现的首元素地址,指向的地址要往后跳一个字节 } return NULL;//如果经过以上比较都不能得出结果,代表找不到子串,要返回空指针 }