C:模拟实现:strcat,strstr,strchr,strcmp

本文深入解析了C语言中字符串处理函数的实现,包括strcat、strstr、strchr和strcmp。通过详细代码示例,展示了如何拼接、搜索、比较字符串以及查找特定字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Strcat

strcat函数的功能是将源字符串加在在目标字符串的末尾,构成新的字符串,构建这个函数的思路是,先检测到目标字符串的末尾’\0’从这个位置开始把源字符串逐个拷贝到目标字符串上,最后别忘了加上’\0’:
具体实现:

char* my_strcat(char*dest, const char*src)//目标空间必须足够,目标和源必须都不为Null
{
    char*ret = dest;
	assert(dest&&src);
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
Strstr

Strstr函数是判断源字符串是不是目标字符串的子字符串,如果是,则返回这个子字符串在目标字符串里的起始位置的地址,我们的设计思路是在目标字符串的起始位置设立一个检查标志位,从这里开始向后查找,当查找到和源字符串第一个字符相同的字符时,源和目标字符串一起向后查找,如果当源字符串到了\0,时之前的字符都相同,那么就说找到了,返回检查标志位,如果中途出现了不同的字符,说明此次查找失败,源字符串指针回到起始位置,而目标字符串则从检查标志位后的位置开始进行新一轮查找,如果当目标字符串已经到了\0时还没有找到完整的源字符串,就说明并不含有源字符串:
具体实现:

char* my_strstr(const char*dest,const char*src)
{
	assert(dest&&src);
	const char*check_start = dest;
	const char*src_back = src;
	while (*dest != '\0')
	{
		dest = check_start;
		while (*dest&&*src && *dest == *src)//出现同步开始判断
		{
			dest++;
			src++;
		}
		if (*src == '\0')
		{
			return (char*)check_start;
		}
		src = src_back;
		check_start++;
	}
	return NULL;
}
Strchr

Strchr与Strstr函数相似,但更为简单,因为它的功能是返回源字符在目标字符串中第一次出现的位置,思路就是遍历目标字符串的每一个字符,一旦遇到相似的,立刻返回只想该位置的指针,如果到了\0还没找到,就说明没有:

char* my_strchr(const char*dest, int cha)
{
	assert(dest);
	while (*dest)
	{
		if (*dest == cha)
		{
			return (char*)dest;
		}
		dest++;
	}
	return NULL;
}

Strcmp

Strcmp函数的功能是逐位比较字符串1与字符串2的字符ASCII值的大小,1>2f返回正数,相等返回0,1<2返回负数;思路就是若相等就一直向后检测字符串1,2的同位字符,不相等立刻返回这两个字符相减的值:

nt my_strcmp(const char* arr1, const char*arr2)
{
	assert(arr1&&arr2);
	while (*arr1==*arr2)
	{
			arr1++;
			arr2++;
	}
	return *arr1 - *arr2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值