模拟实现C语言库函数

1.模拟实现strlen

//方式1.计数器方式
int my_strlen(const char * str) 
{ 
   int count = 0; 
   while(*str) 
   { 
     count++; 
     str++; 
   } 
   return count; 
}

//方式2.不创建临时变量计数器(递归)
int my_strlen(const char * str) 
{ 
  if(*str == '\0') 
    return 0; 
  else 
    return 1+my_strlen(str+1); 
}
//方式3.指针-指针的方式
 int my_strlen(char*s)
{
  char*p=s;
  while(*p!=‘\0)
   p++;
  returnp-s;
}

2.模拟实现strcmp

//方式1
int my_strcmp(const char* dst, const char* src)
{
	assert(dst && src);
	while (*dst != '\0' && *src != '\0')
	{
		if (*dst < *src)
		{
			return -1;
		}
		else if (*dst > *src)
		{
			return 1;
		}
		else
		{
			;
		}
		++dst;
		++src;
	}
	 if (*dst == '\0' && *src == '\0')
	{
		return 0;
	}
	else if (*dst != '\0'&& *src == '\0' )
	{
		return 1;
	}
	else if (*src != '\0' && *dst == '\0')
	{
		return -1;
	}
}

//方式2.
int my_strcmp(const char* src, const char* dst)
{
	int ret = 0;
	assert(dst && src);
	while (!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
		++src,++dst;
	if (ret < 0)
		ret = -1;
	else if (ret > 0)
		ret = 1;

	return (ret);
}

3.模拟实现strcat

char  *my_strcat(char *des, char *src)
{
  assert(des && src);
	char *p = des;
	while (*des)
	{
		++des;
	}
	while (*src)
	{
		*des = *src;
		++des;
		++src;
	}
	*des = '\0';
	return p;
}

4.模拟实现strstr

char * my_strstr(const char* str1, const char* str2)
{
	const char* str_1 = str1;
	const char* str_2 = str2;
	while (*str1)
	{
		while (*str_2 == *str_1 && *str_2 != '\0')
		{
			++str_2, ++str_1;
		}
		if(*str_2 == '\0')
		{
			return str1;
		}
		else
		{
			str_2 = str2;
			++str1;
			str_1 = str1;
		}
	}
	
}

5.模拟实现strchr

const char* Mystrchr(const char*dst, const char str) {
	assert(dst != NULL);
		while (*dst && *dst != str)
			dst++;
		return(dst);
}

6.模拟实现memcmp

void* my_memcpy(void* dst, const void* src, size_t num)
{
	assert(dst && src);

	char* str_dst = (char*)dst;
	char* str_src = (char*)src;
	for (size_t i = 0; i < num; ++i)
	{
		str_dst[i] = str_src[i]; 
	}

	return dst;
}

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;
		}
	}
	return(ret);
}
发布了27 篇原创文章 · 获赞 10 · 访问量 684

猜你喜欢

转载自blog.csdn.net/m1059247324/article/details/103058131
今日推荐