C语言中strstr的模拟实现
strstr可以实现寻找子字符串的功能
头文件为<string.h>
char * strstr ( const char *str1, const char *str2 );
返回内容
Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.
比较过程不包括'\0',但是会在这里停下
我们接下来来模拟实现一下
#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* p1, * p2;
p1 = str1;
p2 = str2;
while (1)
{
if ((*str1 == *str2) && *str1 != '\0')
{
str1++;
str2++;
continue;
}
else if (*str2 != *str1 && *str1 != '\0' && *str2 != '\0')
{
str1 = ++p1;
str2 = p2;
continue;
}
else if (*str2 != *str1 && *str1 == '\0')
{
return NULL;
}
else if (*str2 == '\0')
{
return (char*)p1;
}
}
}
int main()
{
char arr1[20] = { "abbbbbbcdefg" };
char* ret = my_strstr(arr1, "def");
if (ret == NULL)
printf("未找到");
else
printf("%s", ret);
return 0;
}
当然还有其他写法,写法肯定都不是标准答案,只要能实现这种效果
char* my_strstr(const char* str1,const char* str2)
{
assert(str1 && str2);
const char* p1, * p2;
p1 = str1;
p2 = str2;
while (*p1)
{
str1 = p1;
str2 = p2;
while (*str1 == *str2 && *str1 != '\0')
{
str1++;
str2++;
}
if (*str2 == '\0')
{
return (char*)p1;
}
p1++;
}
return NULL;
}
可能有错,如果发现请指出,谢谢

浙公网安备 33010602011771号