strstr函数的使用及模拟实现

目录

1.strstr函数

2.strstr函数的使用

3.strstr函数的模拟实现


1.strstr函数

char* strstr(const char* str1, const char* str2);

strstr函数用于判断字符串str2是否为str1的子串,即str1是否包含str2中所有字符。如果str2是str1的子串,则返回str1中str2第一次出现时首元素的地址,如果不是则返回NULL。 

2.strstr函数的使用

使用strstr函数前,应包含其头文件(#include<string.h>

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

int main()
{
	char str1[] = "abcdedeaf";
	char str2[] = "dea";
	printf("%s\n", strstr(str1, str2));
	return 0;
}

 此时strstr函数返回str1中第二个d的地址,printf函数打印的结果为 deaf

3.strstr函数的模拟实现

模拟实现strstr函数的思路为:定义一个cp指针,移动cp指针,将str1中的字符与str2的首字符相比较,如果相同,则继续比较之后的字符是否与str2之后的字符相同;若不同,则继续比较str1中下一个字符是否与str2的首字符相同。

在str1中字符与str2中首字符相同时,若使用cp指针继续比较后面元素,且移动str2指针,若后面元素不相同,即此时str2不为str1子串,(例如:第一个d与str2中首元素相同,但后面的d与a不同,若此时cp指针与str2指针移动,则cp指针无法比较每一个元素,str2指针无法回到首元素的地址处),因此定义两个指针变量 s1 = cp, s2 = str2,当str1中字符与str2中首字符相同时,用s1与s2进行比较,若s1指向的值与s2指向的值不同,则退出循环,cp++,再比较下一个元素是否与str2中首字符相同。

#include <stdio.h>
#include <string.h>
#include <assert.h>

char* my_strstr(const char* str1, const char* str2)
{
	//判断str1和str2是否为NULL
	assert(str1 && str2);
	char* cp = str1;
	char* s1 = cp;
	char* s2 = str2;
	//若str2中首元素为'\0',则直接返回str1
	if (*str2 == '\0')
	{
		return str1;
	}

	while (*cp)
	{
		//判断str1中元素是否与str2中首元素相同
		s1 = cp;//当cp与str2中首元素相同时,s1向后移动,并与str2中之后元素比较
		s2 = str2;//当cp与str2中首元素相同时,s2向后移动与str1中之后的元素比较
		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return cp;
		}
		cp++;
	}
	return NULL;
}

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠枬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值