查找字符串函数c语言指针实现

c语言作业
在这里插入图片描述
问题:编写一个函数,实现在一个字符串中能够寻找其他字符串并返回出现的位置。

分析:假设a字符串,在a字符串中寻找b字符串。分为以下几种情况:

char a[]="abcdefg"
char b[]="cde"
char a[]="abcdefg"
char b[]="deg"
char a[]="abcccdefg"
char b[]="cde"
char a[]="abcdefg"
char b[]="degsdejfr"

Anyway,我们都要遍历a的每一个元素,对于每一个元素,将其与b的是首元素对比,如果相同就继续下一个元素的比对,比对的过程中就会出现以上的各种情况:1.连续地找到b的全部元素(查找成功);2.在查找时出现了断裂,(第二个例子在f处断裂),这时,就要从a的刚才与b首元素对上号(d)的下一个元素(e)处重新查找b。3.如果情况二在查找失败后没有从原来的元素后面顺次查找,这种情况就会出现错误。4.在遍历了a中每个元素后,都没有找到完整的b,这时就不再查找,退出。

实现思路:
查找的过程运用指针,通过指针的移动,遍历数组元素,指针的移动并不会改变所指向的数组。在a中找b,那么结束有两种可能:找到了,返回位置;没找到,返回零。没找到结束的标志自然是指向a的最后一个元素‘\0’。两个数组中的元素进行对比,就要定义两个指针变量,如果找到了还要返回b在a中的位置,而指针的值是地址,要想返回数组的索引,就要利用数组存储的连续性,对两个地址做差,这两个地址是什么呢?首先减数肯定是数组a的首地址,被减数是b字符段首元素在a中的地址,在a中找到b的首元素后需要记录下这个地址,这么做有两个用途:一是如果后面的元素符合b的剩余元素,意味着查找成功,就做上面所说的减法,返回位置。二是如果后面的元素出现了断点,那么就从记下的这个元素的下一个元素重新开始对比。当开启重新对比时,由于上一次对比的过程中对b的指针进行了移动,所以新一轮要对b的指针进行重置。所以指针str与指针temp的移动并不同步,注意赋值时不要写成带*号的,因为那样操作是递引用,实际操作的是数组,而数组已被定义为const,不可修改,也不能修改。

int my_str(const char *str1,const char *str2)
{
	const char *temp1=str1;
	const char *temp2=str2;
	const char *first=str1;
	
	while(*str1)
	{
		while(*temp1==*temp2)
		{
			temp1++;
			temp2++;
		}
		if(*temp2==0)
		return str1-first;
		temp2=str2;
		str1++;
		temp1=str1;
	}
	return 0;
}

个人理解,如有错误,希望批评指正,谢谢··
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值