天天看點

學習筆記---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

繼續閱讀