【C语言进阶:刨根究底字符串函数】 strstr 函数

本节重点内容:

  • 深入理解strstr函数的使用
  • 学会strstr函数的模拟实现

⚡strstr

strstr的基本使用:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "abcdebcdef";
	char arr2[] = "bcd";
	char* p = strstr(arr1, arr2);
	if (p == NULL)
	{
		printf("找不到");
	}
	else
	{
		printf("%s\n", p);
	}
	return 0;
}

若目标字符串中出现多次源字符串的内容,返回第一次源字符串出现的位置。运行结果如下:


⚡strchr

和 strstr 函数比较类似的函数,用于找出一个字符在字符串中第一次出现的位置。

strchr 基本用法:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "abcdebcdef";
	char str = 'e';
	char* p = strchr(arr1, str);
	if (p == NULL)
	{
		printf("找不到");
	}
	else
	{
		printf("%s\n", p);
	}
	return 0;
}

运行结果如下:


⚡strrchr

strrchr 函数用于找出一个字符在字符串中最后一次出现的位置。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "abcdebcdef";
	char str = 'e';
	char* p = strrchr(arr1, str);
	if (p == NULL)
	{
		printf("找不到");
	}
	else
	{
		printf("%s\n", p);
	}
	return 0;
}

代码运行结果如下:


 ⚡模拟实现strstr函数 

strstr 函数的模拟实现也是数据结构中串的匹配实现的暴力算法:BF算法。

为了使匹配字符串的过程中,如果发生匹配失败,能够让str1指向目标字符串中字符的下一个字符,str2能够重新回到要找的字符串开始位置,我们需要使用双指针,一个用来记住当前位置,一个来方便匹配过程中指针的移动。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>

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

int main()
{
	char arr1[] = "abbbcdef";
	char arr2[] = "bbc";
	char* p = my_strstr(arr1, arr2);
	if (p == NULL)
	{
		printf("找不到\n");
	}
	else
	{
		printf("%s\n", p);
	}
	return 0;
}

运行结果如下:


感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。

98b76a6f4a9c4ca88fd93da1188ac6f9.gif

猜你喜欢

转载自blog.csdn.net/JX_BC/article/details/129642070
今日推荐