c语言模拟实现strstr函数

strstr()是string.h库里的一个函数,它的效果是传两个字符串地址,在第一个字符串中找第二个字符串。如果存在返回存在第一个字符串中关于第二个字符串的首地址。如果不存在,就返回空指针。

首先需要定义三个指针,s1,s2,p。因为两个字符串不能改变,需要重新定义三个指针来实现,当找到一半或者找到其中几个字符时,需要一个p指针来记录第一个字符串中开始比较的起始位置,下一次遍历时,将p+1赋给s1再一次进行对比,直到全部遍历完第一个字符串,亦或者找到了子字符串。找到时,此时s2指向\0,只需加一个条件,直接结束循环,直接返回p的地址就是所查找子字符串在第一个字符串的起始位置。

代码实现如下:

#include 
#include 
#include 

char* my_strstr(const char* str1, const char* str2) {
	assert(str1 && str2);
	const char* s1 = str1;
	const char* s2 = str2;
	const char* p = str1;
	while (*p) {
		s1 = p;
		s2 = str2;
		while(*s2!='\0'&&*s1!='\0' &&* s1 == *s2) {
			 s1++;
			 s2++;
		}
		if (*s2 == '\0') {
			return p;
		}
		p++;
	}
	return NULL;

}
int main() {
	char arr1[] = "abbbcdef";
	char arr2[] = "bcd";
	char*ret=my_strstr(arr1, arr2);

	if (ret == NULL) {
		printf("没找到\n");
	}
	else {
		printf("%s\n", ret);
	}
	return 0;
}

你可能感兴趣的:(C语言,c语言,开发语言)