学习笔记---str族函数

Strcpy函数实现:

char* myStrcpy(char *dest, const char *src)
{
	assert(dest != NULL && src != NULL);
	char *address = dest;
	while (*address++ = *src++)
	{
		NULL;
	}
	//*dest = '\0';

	return dest;
}

Strncpy函数实现:

char* myStrncpy(char *dest, const char *src, char ch)
{
	assert(dest != NULL && src != NULL);
	char *address = dest;
	while (*src)
	{
		while (*src == ch)
		{
			return NULL;
		}
		*address++ = *src++;
	}
	//*dest = '\0';   //这一句可以不要
	return dest;
}

Strcmp函数实现:

int myStrcmp(const char *dest, const char *src)
{
	assert(dest != NULL && src != NULL);

	int ret = 0; 
	
	while (!(ret = *(unsigned char*)dest - *(unsigned char*)src) && *dest)
	{
		++dest;
		++src;
	}
	
	if (ret > 0)
		return 1;
	else if (ret < 0)
		return -1;
	else
		return 0;

Strncmp函数实现:

int myStrncmp(const char *dest, const char *src, int count)
{
	assert(NULL != dest && NULL != src);
	int ret = 0;

	while (!(ret = *(unsigned char*)dest - *(unsigned char*)src) && count)
	{
		dest++;
		src++;
		count--;
	}

	if (ret > 0)
		return 1;
	else if (ret < 0)
		return -1;
	else
		return 0;
}


Strchr函数实现:

//【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。
char* myStrchr(const char *src, int value)
{
	assert(src != NULL);

	//while (*src)  //   当value为 '\0' 时这个方法错误
	//{
	//	if (*src == (char)value)
	//	{
	//		return (char*)src;
	//	}
	//	*src++;
	//}
	//return NULL;
	
	while (*src && *src != (char)value)
	{
		src++;
	}
	if (*src == (char)value)
		return (char*)src;
	return NULL;
}

Strrchr函数实现:

//【返回值】如果找到指定的字符则返回该字符所在地址,否则返回 NULL。
char* myStrrchr(char *src, char ch)
{
	
	assert(src != NULL);
	int len = strlen(src);
	int i;
	int count = 0;

	for (i = len; i > 0; i--)
	{
		if (*(src + i) == ch)
		{
			return (char*)ch;
		}
		count ++;
		printf("count = %d\n", count);

	}

	return NULL;

}


 

 

strcat() 函数用来连接字符串,其原型为:
    char *strcat(char *dest, const char *src);
【参数】dest 为目的字符串指针,src 为源字符串指针。
strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。
注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。
【返回值】返回dest 字符串起始地址。

Strcat函数实现:

char *myStrcat(char *dest, const char *src)
{
	assert(NULL != dest && NULL != src);

	char *address = dest;   // 保存dest的地址 

	while (*address)		// 相当于 while (*address != '\0')
	{
		address++;	// 地址向后偏移
	}
	while (*address++ = *src++)
	{
		NULL;    //这一句可以不写
	}
	//*dest = '\0';   //这一句是否可以省略
	return dest;
	
}

Strncat 函数实现:

char *myStrncat(char *dest, const char *src, int num)
{
	assert(NULL != dest && NULL != src);

	char *address = dest;

	while (*address)
	{
		address++;
	}
	while (num)
	{
		*address++ = *src++;
		num--;
	}
	return dest;

}


功 能: 返回字符串长度

用 法: int strlen(char *str);

Strlen函数实现:

int myStrlen(const char *dest)
{
	int ret = 0;
	while (*dest)
	{
		dest++;
		ret++;
	}
	return ret;

}


博客转自:http://blog.chinaunix.net/uid-29339253-id-4737064.html

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值