C语言实现在一个字符串中查找子串。
要求:不使用内置函数strstr,自己编写一个类似功能的函数能够返回字符串中子串的起始地址。
代码如下:
#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* p1, const char* p2)
{
char* s1 = NULL;
char* s2 = NULL;
char* cur = (char*)p1;//记录每次匹配的起始位置
assert(p1);
assert(p2);
if(!(*p2))
{
return (char*) p1;
}
while(*cur)
{
s1 = cur;
s2 = (char*)p2;
while(*s1 && *s2 && (*s1 == *s2))
{
s1++;
s2++;
}
if(!(s2))
{
return cur;//找到子串返回起始位置
}
cur++;
}
return NULL;//没找到子串
}
int main()
{
char* p1 = "abcdefabdef";
char* p2 = "gb";
char* start = my_strstr(p1, p2);
if(start == NULL)
printf("不存在\n");
else
printf("%s\n", start);
return 0;
}