string库之模拟实现strspn、strcspn与strpbrk

原型:

    C库string.h中的strspn函数

描述:

    C 库函数 size_t strspn(const char *str1, const char *str2) 检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标。

参数:

    str1:要被检索的 C 字符串。

    str2: 该字符串包含了要在 str1 中进行匹配的字符列表。

返回值:

    该函数返回 str1 中第一个不在字符串 str2 中出现的字符下标。

模拟实现strspn:

size_t my_strspn(const char *str1, const char *str2)
{
	int i = 0;
	char *pstr1 = (char *)str1;

	assert(NULL != str1);
	assert(NULL != str2);

	while (*pstr1)
	{
		char *pstr2 = (char *)str2;
		while (*pstr2 && *pstr1 != *pstr2)
			++pstr2;

		if (*pstr1 == *pstr2)
			break;

		++pstr1;
	}

	return (pstr1 - str1);
}

原型:

    C库string.h中的strcpsn函数

描述:

    C 库函数 size_t strcspn(const char *str1, const char *str2) 检索字符串 str1 开头连续有几个字符都不含字符串 str2 中的字符。

参数:

    str1:要被检索的 C 字符串。

    str2: 该字符串包含了要在 str1 中进行匹配的字符列表。

返回值:

    该函数返回 str1 开头连续都不含字符串 str2 中字符的字符数。

模拟实现strcspn:

    和strspn函数实现方式一样。



原型:

    C库string.h中的strcpsn函数

描述:

    C 库函数 char *strpbrk(const char *str1, const char *str2) 检索字符串 str1 中第一个匹配字符串 str2 中字符的字符,不包含空结束字符。也就是说,依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置。

参数:

    str1:要被检索的 C 字符串。

    str2: 该字符串包含了要在 str1 中进行匹配的字符列表。

返回值:

    该函数返回 str1 中第一个匹配字符串 str2 中字符的字符数,如果未找到字符则返回 NULL。

模拟实现strpbrk:

char *my_strpbrk(const char *str1, const char *str2)
{
	char *pstr1= (char *)str1;

	assert(NULL != str1);
	assert(NULL != str2);

	while (*pstr1)
	{
		char *pstr2 = (char *)str2;

		while (*pstr2 && (*pstr2 != *pstr1))
			++pstr2;

		if (*pstr2 == *pstr1)
			break;

		++pstr1;
	}

	return pstr1;
}


    

注:这三种模拟实现的方式效率较低,可以利用数据结构中map相关知识优化算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值