字符串函数strchr 、 strrchr 、strrstr的实现

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strchr(const char *dst, char c)         //由于我们只是查找,不修改这个字符串,所以将dst声明成const
{
	assert(dst);                                   //先对字符串进行断言
	const char *pdst = dst;                    //将字符串其实位置保存下来
	while (*pdst)
	{
		if (*pdst == c)                       //找到就返回这个地址
			return (char *)pdst;
		else                                           
			pdst++;
	}
	return NULL;                                    //没找到返回空
}
int main()
{
	char c=0;
	char arr[40]={0};
	char * = NULL;
	scanf("%c", &c);
	scanf("%s", arr);
	str=my_strchr(arr, c);
	printf("%#p\n",*str);
	system("pause");
	return 0;
}


#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strrchr(const char *src, char c)         //由于我们只是查找,不修改这个字符串,所以将src声明成const
{
	assert(src);                                   //先对字符串进行断言
	const char *psrc = src;
	char *dst = NULL;
	while (*psrc)
	{
		if (*psrc == c)
			dst =(char *) psrc;              //用标签记录找到的位置
		psrc++;
	}
	return dst;
}
int main()
{
	char c = 0;
	char arr[40];
	char *place = NULL;
	scanf("%c%s", &c, arr);
	place = my_strrchr(arr, c);
	printf("%#p\n",place);
	system("pause");
	return 0;
}


//strrstr库里面没有,我们仿照strchr这个函数的功能实现一个strrstr
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char *my_strrstr(const char *dst, const char *src)
{
	assert(dst);
	assert(src);
	const char *pdst = dst;
	const char *psrc = src;
	char *right= NULL;
	while (*dst)
	{
		while (*pdst == *psrc)                      
		{
			if (*pdst== '\0')                     //如果*pdst为‘\0'则已经找到最后一个
				return right=(char *)dst;
			else
			{
				pdst++;
				psrc++;
			}
		}
		if (*psrc == '\0')                        //找到一个,但不确定是不是最后一个
			right = (char *)dst;
		pdst = ++dst;
		psrc = src;
	}
	return right;
}
int main()
{
	char arr1[50] = { 0 };
	char arr2[40] = { 0 };
	char *place = NULL;
	scanf("%s%s",arr1, arr2);
	place = my_strrstr(arr1, arr2);
	printf("%#p\n",place);                                     //输出这个地址
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值