[c语言]——模拟实现字符串函数

1.strcpy实现字符串的拷贝

char* my_strcpy(char* dest,const char* src)

{

	char* temp = dest;

	assert(src != NULL);

	while(*dest++ = *src++)

	{

		;

	}

	return temp;

}

2.strcat实现字符串的连接

char* my_strcat(char* arr,const char* src)

{

	char* temp = arr;

	assert(src != NULL);

	while(*arr != '\0')

	{

		arr++;

	}

	while(*arr++ = *src++)

	{

		;

	}

	return temp;

}

3.strstr实现子字符串在目标字符串中的查找

char* my_strstr(const char* dest,const char* src)//函数返回找到目标开始匹配且成功的起始位置

{

	const char* s1 = dest;//定义s1让dest备份

	const char* s2 = src;

	const char* ptr = dest;

	assert(src != NULL);



	while(*ptr)//ptr++寻找开始匹配的位置

	{

		s1 = ptr;//记住开始匹配的位置

		s2 = src;//记住子字符串开始的位置

		while(*s1 && *s2 && *s1 == *s2)//有一个条件为假结束

		{

			s1++;

			s2++;

		}

		if(*s2 == '\0')//当s2说明匹配成功 返回目标字符串的开始位置

			return (char*)ptr;

		ptr++;//假设开始匹配却未匹配成功*ptr没有成为'\0'时,ptr加加开始下一轮查找

	}

	return NULL;//没有找到时返回空指针



}

4.strcmp实现字符串的比较

int my_strcmp(const char* dest,const char* src)

{

	assert(dest != NULL);//判断传过来的指针是不是为空

	assert(src != NULL);

	while(*dest == *src)//当src为'\0'时结束,但他的值赋给了dest,

		//所以在循环内部返回0;然后跳出循环

	{

		if(*dest == '\0')

		{

			return 0;

		}

		dest++;src++;

	}

	if(*dest < *src)

	{

		return -1;

	}

	else

	{

		return 1;

	}

}

5.memcpy(也同时实现了memmove)内存的字符拷贝

void* my_memcpy(void* dest,const void* src,int count)

{

	void* temp = dest;

	assert(dest != NULL);

	assert(src != NULL);

	while(count--)

	{

		if(src > dest)	

		{
			*((char*)dest) = *((char*)src);
			((char*)dest)++;
			((char*)src)++;
		}

		else

		{

			*((char*)dest+count) = *((char*)src+count);

		}

	}

	return temp;

}

6.strchr在目标字符串中查找字符

char* my_strchr(const char* dest,const char* src)

{	

	while(*dest)

	{	

		if(*dest == *src)

			return dest;

		dest++;

	}

	return NULL;

	

}

7.strncpy自己定义要拷贝的字符串长度

char* my_strncpy(char* dest,const char* src,int count)

{

	char* ret = dest;	

	assert(src != NULL);

	while(count--)//count来控制循环次数

	{

		*dest++ = *src++;		

	}

	*dest = '\0';//当赋值结束时应当让目标字符串以‘\0’结束

	return ret;

}

8.strncmp自己定义需要比较的字符串长度

int my_strncmp(const char* dest,const char* src,int count)

{

	assert(dest != NULL);

	assert(src != NULL);

	while((*dest == *src) && --count)//必须同时满足俩个条件时才满足

	{

		if(*dest == '\0')//如果*dest为0,说明*src已经结束返回0

			return 0;

		dest++;

		src++;

	}

	return *src-*dest;//直接返回比较结果数字
	
}

9.strncat自己定义需要连接字符串的长度

char* my_strncat(char* dest,const char* src,int count)

{

	

	char* ret = dest;//保存dest的起始位置

	if(count < 0)

		return NULL;//判断假如count输入为负数时

	assert(src != NULL);

	while(*dest != '\0')

	{

		dest++;

	}

	while(count--)

	{

		*dest++ = *src++;		

	}

	*dest = '\0';//当赋值结束时应当让目标字符串以‘\0’结束

	return ret;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值