C语言 ——— 学习和使用 strstr 函数,并模拟实现

目录

strstr 函数的作用

学习 strstr 函数​编辑

使用 strstr 函数

模拟实现 strstr 函数


strstr 函数的作用

查找子字符串

返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回 null 指针


学习 strstr 函数

函数的参数:

const char* str1:指向字符串的指针,也就是目标字符串,因为不会改变原字符串,所以使用 const 关键字修饰

const char* str2:指向字符串的指针,也就是原头字符串,在目标字符串中找原头字符串

函数的返回值:

const char* :当在 str1 中 找到了 str2 ,那么就返回 str1 找到 str2 的起始位置,否则返回 NULL ,因为同样不会改变原字符串,所以使用 const 修饰


使用 strstr 函数

代码演示:

char str1[] = "abcdefeeefghijk";
char str2[] = "eefghi";

printf("%s\n", strstr(str1, str2));

代码验证:

在 str1 中找到了 str2 ,那么就会从 str1 找到 str2 的位置开始返回,并往后打印,直到 '\0'


模拟实现 strstr 函数

代码演示:

char* my_strstr(char* destination, char* source)
{
	assert(destination);
	assert(source);

	char* p = destination;
	char* s1 = NULL;
	char* s2 = NULL;

	while (*p != '\0')
	{
		s1 = p;
		s2 = source;

		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
			return p;

		p++;
	}

	return NULL;
}

代码解析:

p 指针用来记录匹配开始的位置,利用 s1 和 s2 同时往后走进行匹配
s1 和 s2 匹配不成功时,p 指针就指向下一个位置
s1 和 s2 匹配成功时,s1 和 s2 就同时往后走,当循环结束后,判断 s2 是否走到了 '\0'
走到了 '\0' 就说明匹配成功,返回 p 这个指针,因为 p 是记录匹配开始的位置的
否则一直匹配不成功,直到 p 指针走到 '\0',就返回 NULL

代码验证:

能匹配成功时:

匹配不成功时:

上一篇:C++ ----------- 栈和队列


下一篇:C#WPF使用CommunityToolkit.Mvvm库