字符串操作函数中有一个函数是strstr函数,它实现的功能是查找一个字符串是否为另一字符串的子串。其具体内容如下:
strstr
Find a substring.
char *strstr( const char *string, const char *strCharSet );
功能演示:
代码实现:
char* my_strstr(const char* str1, const char* str2) //前面为目标,后面为源(找目标中有没有源)
{
const char* p1 = str1; //工作指针
const char* p2 = str2; //工作指针
const char* s1 = str2; //记录指针
while (*s1)
{
p1 = s1;
p2 = str2;
while (*p1 && *p2 && (*p1 == *p2))
{
p1++;
p2++;
}
//出来while循环又可能是不满足,
//也有可能s2都查找完了找到了
//还有可能是s1找完了没有找到 防止越界
if (*p2 == '\0')
{
return (char*)s1;
}
s1++;
}
return NULL;
}
int main()
{
char arr1[] = "abcdxabcdefxx";
char arr2[] = "abcdef";
char*p = my_strstr(arr1, arr2);
if (p == NULL)
{
printf("找不到\n");
}
else
{
printf("%s\n", p);
}
return 0;
}
这里比较难想到的是while循环的判断条件。
为了防止越界访问,p1为’\0'时要跳出
查找到p2的‘\0’的时候,要跳出 可能找到了
针对上述三种情况做出相应处理:
*p1==‘\0'的时候跳出循环
循环继续
判断*p2是不是'\0'。然后返回此时的记录指针的地址