字符串查找函数strstr

前言:本章我们将学习如何用strstr函数在字符串中查找是否存在指定的字符串。

strstr

功能:在一个字符串中查找是否存在指定的字符串(定位子字符串)

cplusplus介绍如下:(仅供参考,看不懂英文也没关系)

在这里插入图片描述

strstr函数具有2个参数,第一个参数str1是要扫描的C字符串,第二个参数str2为包含要匹配的字符序列的C字符串。
在字符串str1中找字符串str2,若是找到了,则返回字符产str2在字符串str1中第一次出现的位置,若是没找到,则返回空指针。

请看下面的示例代码(在 “abbbcdefg"中查找"bbc”):

#include<stdio.h>
#include<string.h>    //引用字符串函数头文件
int main()
{
    
    
	char str1[] = "abbbcdefg";   //要扫描的字符串
	char str2[] = "bbc";         //要匹配的字符序列
	printf("%s\n",strstr(str1, str2));  //打印
	return 0;
}

打印结果为:
在这里插入图片描述

要匹配的字符序列为"bbc",从str1的首元素开始扫描,a(str1[0])不满足条件,则继续向后扫描。第二个元素b(str1[1])虽满足条件,但继续向后扫描到b(str[3])与要求的c不符合,则从b(str[2])开始重新扫描,发现符合条件,则返回b(str[2])的地址,因此打印的字符串为"bbcdefg"。

判断子字符串是否包含在要扫描字符串内

上文讲过,若是子字符串不包含在要扫描字符串类,则会返回一个空指针(NULL),因此可以通过此来判断子字符串是否包含在要扫描字符串内。

代码实现如下:

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char str1[] = "abbbcdefg";
	char str2[] = "bbc";
	char str3[] = "abc";
	if (strstr(str1, str2) == NULL)
	{
    
    
		printf("str2不包含在str1中\n");
	}
	else
	{
    
    
		printf("str2包含在str1中\n");
	}
	if (strstr(str1, str3) == NULL)
	{
    
    
		printf("str3不包含在str1中\n");
	}
	else
	{
    
    
		printf("str3包含在str1中\n");
	}
	return 0;
}

输出结果如图:
在这里插入图片描述

模拟实现strstr(若有兴趣,可以看看)

模拟实现strstr时,要注意重复的情况这一点:比如在"abbbc(str1)"中查找"bbc(str2)",在扫描到b(str1[1])势必会向后继续扫描,但是发现b(str1[3])并不满足条件。下面应该从b(str1[2])重新扫描,但是上面已经查找到了b(str1[3]),怎么返回呢?因此,每次扫描时应该记住首个元素的地址,以方便扫描发现不符合要求后返回。

代码如下:

char* my_strstr(const char* arr,const char* str)
{
    
    
	char* s1 = NULL;  
	char* s2 = NULL;
	char* p = arr;  
	while (*p)
	{
    
    
		s1 = p;
		s2 = str;
		while (*s1 && *s2 && *s1 == *s2)
		{
    
    
			s1++;
			s2++;
		}
		if (*s2 == '\0')  
			return p;
		p++;
	}
	return NULL;
}
int main()
{
    
    
	char arr[] = "abbbbcd";
	char str[] = "bbc";   
	printf("%s\n", my_strstr(arr, str));
	return 0;   
}

文末BB:对哪里有问题的朋友,可以在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,希望朋友们给点点赞和关注。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_73390155/article/details/129736748