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;
}

可能有错,如果发现请指出,谢谢

posted @ 2025-11-21 22:11  好想成为人类啊  阅读(11)  评论(0)    收藏  举报