strstr的使用和模拟实现

strstr的使用

  1. char * strstr (const char * str1,const char * str2);
  2. 返回str2在str1中第一次出现的位置,没有出现的话返回空指针。
  3. 字符串比较匹配不包含\0字符,以\0作为结束标志

strstr模拟实现

  1. 我们需要一个指针变量,记录起始位置和结束位置,否则无法知道从哪开始匹配成功的
  2. 还需要两个指针变量,记录起始位置。因为在匹配的过程中位置会发生变化
  3. 指针cur存放的是当前匹配的起始位置,判断起始位置是否为/0后进入while循环,进入while循环后,将其起始位置赋给s1,将字符串2赋给s2去匹配,如果s1=s2就++,继续匹配下一个地址的内容,如果匹配不成功,则跳出while循环。跳出while循环后,cur++使得起始位置+1,继续重新匹配
  4. 但是同时s1和s2不能等于='\0',因为如果是最后匹配成功了,但是因为没有前面的条件无法跳出循环。所以设置该条件是为了使得s1和s2还有继续匹配的寄回
  5. 如果匹配到s2='\0',那就说明找到了,返回cur起始位置
  6. 如果匹配到起始位置cur都为0了,也就是跳出循环了,那说明匹配完了,找不到了
  7. 特殊场景:如果str2为空,则直接返回str1
  8. 最后返回类型需要强制类型转换为(char * ),因为该类型是const char *,需要将其转换为const char *

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
char* my_strstr(char* str1, char* str2)
{
	const char * s1 = NULL;
	const char * s2 = NULL;
	const char * cur = str1;
	while (*cur)
	{
		s1 = cur;
		s2 = str2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char *)cur;
		}
		cur++;
	}
	return NULL;
}

int main()
{
	char arr1[] = "abcqqqcp";
	char arr2[] = "qqc";
	char *ret = my_strstr(arr1, arr2);
	if (ret == NULL)
	{
		printf("没有找到");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值