栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

(C语言)strstr库函数的简单使用以及模拟实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(C语言)strstr库函数的简单使用以及模拟实现

C语言中的strstr函数用来查找子串,找到返回首字符的地址,找不到返回空指针。

使用:

#include
#include
int main()
{
	char *p1 = "abcdef";
	char *p2 = "def";
	//找不到返回一个空指针 找到返回d的位置 
	char *ret = strstr(p1, p2);//在p1指向的字符串里查找是否存在p2指向的字符串
	if (ret == NULL) 
	{
		printf("子串不存在n");
	}
	else 
	{
		printf("%sn", ret);//ret本身存储的值不是地址 所以无需解引用就可使用
		//例如 p1先被赋值为"abcdef" 但p1指针指向"abcdef"中a的地址 所引用以p1无需解引用
	}
	return 0;
}

模拟实现:

抽象图解:

实现代码:

//查找字符串函数strstr
//char* strstr(const char* string, const char* strCharSet);
//NULL - 指的是空指针
//NUL/Null - 指的是''

//传过来俩个字符地址 拿字符型指针接收, 由于不会改变原来的字符串 加上const  返回的也是地址 所以返回类型为char*
//return 有终止函数的作用 
char* my_strstr(const char* p1, const char* p2)
{
	assert(p1 != NULL);//确保p1 ,p2都不能为空指针
	assert(p2 != NULL);
	char* s1 = NULL;//后面写了s1 = cur = p1,s2 = p1 
	char* s2 = NULL;
	char* cur = (char*)p1;
	if (*p2 == '')//若p2是空字符串
	{
		return (char*)p1;//强转消除警告
	}
	while (*cur)//cur先走到  p2不是p1的子串
	{
		s1 = cur;
		s2 = (char*)p2;
		//while((*s1!='') && (*s2 !='') && (*s1 == *s2)) //俩字符相同s1,s2一起走
		while((*s1)&&(*s2)&& !(*s1-*s2))//这个更精简 s1-s2 若s1,s2相同,结果为0, !取反 条件为真 
		{
			s1++;
			s2++;
		}
		if (*s2 == '')//找到了 返回匹配成功的位置
		{
			return cur;
		}
		if (*s1 == '')//若p1的长度小于p2的长度 提前终止
		{
			return NULL;
		}
		cur++;//俩字符不相同s1独自走
	}
	return NULL;//找不到子串 返回空指针
}
int main()
{
	char *p1 = "abcddefghi";
	char *p2 = "def";
	//找不到返回一个空指针 找到返回d的位置 
	char *ret = my_strstr(p1, p2);//在p1指向的字符串里查找是否存在p2指向的字符串
	if (ret == NULL) 
	{
		printf("子串不存在n");
	}
	else 
	{
		printf("%sn", ret);//ret本身存储的值不是地址 所以无需解引用就可使用
		//例如 p1先被赋值为"abcdef" 但p1指针指向"abcdef"中a的地址 所引用以p1无需解引用
	}
	return 0;
}

 视频讲解是:

C语言从入门到进阶(C语言入门搞定C语言C语言视频教程C语言入门到进阶C语言教程C语言教程C语言教程C语言入门教程C语言入教程C语言C语言视频C语言教程)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1oi4y1g7CF?p=54

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330107.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号