【造轮子】实现 strstr、strchr 函数

本文介绍了如何实现C库中的strstr和strchr函数。strstr函数用于在字符串中查找子串首次出现的位置,当子串为空时,返回整个目标字符串的地址。strchr函数则查找目标字符在字符串中首次出现的位置。文章详细讲解了这两个函数的功能、说明,并提供了循环和递归两种方法的实现。

1. strstr 函数

1.1 函数简介

strstr 函数为 C 库函数之一,用于检索子串在字符串中首次出现的位置。

  • 原型:char* strstr (char* str, char* substr);
  • 所属头文件:<string.h>
  • 功能:在字符串 str 中检索子串 substr
  • 返回:如果找到,返回子串在字符串中的地址;如果没找到,返回 NULL。

1.2 函数说明

  • 在调用原函数时,当传参 substr 指向为字符为 '\0' 时,函数返回的是目标字符串 str 原本指向的地址,即返回了整个目标字符串。

1.3 函数实现

char* strstr(const char* str, const char* substr)
{
	if (substr == '\0')
	{
		return str;
	}
	
	// 检索子串
	while (*str != '\0')
	{
	    // 找到子串的第一个字符在目标字符串中的位置
		if (*str == *substr)
		{
			const char* pstr = str;
			const char* psubstr = substr;
			while ((*pstr != '\0') && (*pstr++ == *psubstr++))
			{
				if (*psubstr == '\0')
				{
					return str;
				}
			}
			
			if (*pstr == '\0')
			{
				// 子串已长于目标字符串的剩余部分
				break;
			}
		}
		str++;
	}
	
	// 检索失败返回 NULL
	return NULL;
}

2. strchr 函数

2.1 函数简介

strchr 函数为 C 库函数之一,用于检索目标字符在字符串中首次出现的位置。

  • 原型:char* strchr (const char* str, int c);
  • 所属头文件:<string.h>
  • 功能:在字符串 str 查找目标字符 c
  • 返回:如果找到,则返回第一个找到的目标字符的地址,否则返回 NULL。

2.2 函数说明

  • 实现方法有循环与递归两种方法,在下文中也会一并实现。

2.3 函数实现

  • 循环方法
char* strchr(const char* str, int c)
{
	while (*str != '\0')
	{
		if (*str == c)
		{
			return (char*)str;
		}
        str++;
	}
	return NULL;
}
  • 递归方法
char* strchr(const char* str, int c)
{
	if (*str == '\0')
	{
		return NULL;
	}
	else if (*str == c)
	{
		return (char*)str;
	}
	else
	{
		return strchr(str + 1, c);
	}
}

更多造轮子系列博文

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值