模拟实现strstr

strstr的作用是寻找到并打印出之后的字符串

如图:

模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
//模拟实现strstr
#include<stdio.h>
#include<string.h>
char* my_strstr(const char* arr1,const char* arr2)
{
	const char* p1 = NULL;
	const char* p2 = NULL;
	const char* cur = arr1;//建立一个初始位置
	if (*arr2 == '\0')//如果一开始传输的就是空值,则直接返回
		return (char*)cur;
	while (*cur)
	{
		p1 = cur;
		p2 = arr2;
		while (*p1!='\0'&&*p2!='\0'&& * p1 == *p2)//防止两份相同的字符串出现导致越界
		{
			
			*p1++;
			*p2++;
		}
		if (*p2 == '\0')//当遍历到\0时停止并返回初始位置
		{
			return (char*)cur;//原来是const char*类型,强制类型转换为char*
		}
		cur++;//没有找到则初始位置向右偏移
	}
}
int main()
{
	char arr1[] = "abbbcabc";
	char arr2[] = "bbc";
	char* str = my_strstr(arr1, arr2);//打印出寻找的以及之后的所有字符
	//char*str=strstr(arr1, arr2);//打印出寻找的以及之后的所有字符
	printf("%s", str);
	return 0;
}

注意

建立初始位置cur,这样不管p1怎么改变都不会影响cur

在循环里寻找p1p2相同的字符,如果没找到就cur++;

这样就可以把已经找过的字符给排除掉

最后返回cur就是要找到的字符串

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值