模拟实现strstr,strcpy,strchr,memove,memcpy,strcat,strcmp

1.my_strcpy

字符串拷贝:

char *my_strcpy(char *dst ,char const *src)
{
	assert(dst!=NULL);     //断言 dst不为空指针
	assert(src!=NULL);
	while(*dst++=*src++)
	{
		;
	}
	return dst;
}

2.my_strcat

字符串连接:

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

3.my_strstr

查找子串:

char const*my_strstr(char const *str,char const*src)
{
	
	  assert(str!=NULL);
	  assert(src!=NULL);

	    if(*src)
		  return NULL;
	  while(*str)
	  {
		  char const *l = src;
		   char const *p = str;
		  while(*p == *l && *p && *l)
		  {
			  p++;
			  l++;
		  }
		  if(*l)
			  return p;
		  str++;
	  }

	  return NULL;
}

4.my_strchr

查找字符串中的字符:

char const*my_strchr(char const *str,char c)
{
	assert(str!=NULL);
	while(*str)
	{
		if(*str == c)
			return str;
		else
			str++;
	}
	return NULL;
}

5.my_memcpy

内存拷贝:

void *my_memcpy(void *dst,void *src,unsigned int count)
{
	 void *ret = dst;                            //count 为拷贝的字节
	while(count--)
	{
		*(char *)dst = *(char *)src;       //必须强制类型转换
		dst = (char *)dst +1;
		src = (char *)src +1;
	}

	return ret;
}

6.my_memove

内存移动:

void *my_memove(void *dst,void *src,unsigned int count)
{
	void *ret = dst;
	while(count--)
	{
		if(dst<src)                   //如果目的地的内存在源的左边,从前往后拷贝
		{
			*(char *)dst = *(char *)src;
		dst = (char *)dst +1;
		src = (char *)src +1;
		}
		else                                 //如果目的地的内存在源的右边,从后往前拷贝
		{
			*((char *)dst+count) = *((char *)src+count);
		}
	}
	return ret;
}





猜你喜欢

转载自blog.csdn.net/congjichukaishi/article/details/80338627
今日推荐