实现常见的string函数

1.实现strcpy

/* 1.实现strcpy */
char *my_strcpy(char *dest, const char *src)
{
	char *ret = dest;
	assert(dest != NULL);
	assert(src != NULL);

	while ((*dest++ = *src++)){//赋值
		;
	}
	return ret;
}

2.实现strcat

/* 2.实现strcat:字符串拼接 */
char *my_strcat(char *dest, const char *src)
{
	char *ret = dest;
	assert(dest != NULL);
	assert(src != NULL);

	while (*dest){
		dest++;
	}

	while ((*dest++ = *src++)){
		;
	}
	return ret;
}

3.实现strstr

/* 3.实现strstr:查找字符串的首次出现 */
char *my_strstr(const char* str1, const char* str2)
{
	assert(str1);
	assert(str2);

	char *cp = (char *)str1;
	char *substr = (char *)str2;
	char *s1 = NULL;

	if (*str2 == '\0'){
		return 0;
	}

	while (*cp){
		s1 = cp;
		substr = str2;
		while (*s1 && *substr && (*s1 == *substr)){
			s1++;
			substr++;
		}
		if (*substr == '\0'){
			return cp;
		}
		cp++;
	}

}

4.实现strchr

/*
4.实现strchr
函数功能:查找一个字符。在一个字符串中查找一个特定的字符。
函数原型:char *strchr(char const *str,int ch);
函数说明:strchr在字符串str中查找字符ch第一次出现的位置,找到后返回一个指向该位置的指针。如果该字符不存在于字符串中,则返回一个NULL指针。
注意:第二个参数是一个整型值,但是,它包含了一个字符串值。
函数实现
*/
char *my_strchr(char *s, char c)
{
	char*p = s;
	while (*s && *s != c)
		s++;
	if (*s == c)
		return s;
	return NULL;
}

5.实现strcmp

/* 5.实现strcmp */
int my_strcmp(const char *src, const char *dst)
{
	int ret = 0;

	while (!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
		++src, ++dst;

	if (ret < 0)
		ret = -1;
	else if (ret > 0)
		ret = 1;

	return ret;
}

6.实现memcpy

/* 6.实现mencpy */
void *memcpy(void *dst, const void *src, size_t count)
{
	void *ret = dst;

	while (count--){
		*(char *)dst = *(char *)src;
		dst = (char *)dst + 1;
		src = (char *)src + 1;
	}
	
	return ret;
}

7.实现memmove 

/* 7.实现memmove */
void *memmove(void *dst, const void *src, size_t count)
{
	void *ret = dst;
	if (dst <= src || (char *)dst >= ((char *)src + count)){
		while (count--){
			*(char *)dst = *(char *)src;
			dst = (char *)dst + 1;
			src = (char *)src + 1;
		}
	}
	else{
		dst = (char *)dst + count - 1;
		src = (char *)src + count - 1;

		while (count--){
			*(char *)dst = *(char *)src;
			dst = (char *)dst - 1;
			src = (char *)src - 1;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39026129/article/details/80375444