天天看点

学习笔记---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

继续阅读