模拟实现多种函数(strlen,strcpy,strcat,strstr,strcmp,memcpy,memmove)

●模拟实现strlen三种方式:
方式一

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

方式二

//不能创建临时变量计时器
int my_strlen(const char *str)
{
if(*str=='\0')
return 0;
else
return 1+my_strlen(str+1);
}

方式三

//指针-指针方式
int my_strlen(char * s)
{
char *p = s;
while(*p!=‘\0’)
    p++;
return p-s;
}

●模拟实现strcpy:

注意
       ● 参数顺序。
       ●函数的功能、停止条件
       ●assert
       ●const 修饰指针
       ●函数返回值

char *my_strcpy (char * dest,const char * src)
{
char*ret=dest;
assert(dest!=NULL);
assert(src!=NULL);
while((*dest++=*src++))
{
   ;
}

return ret;
}

●模拟实现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;
}

●模拟实现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 NULL;
while(*cp)
 {
    s1=cp;
    substr=str2;
   while(*s1 && *substr&&(*s1==*substr))
   {
   s1++;
   substr++;
   }
if(*substr=='\0')

  return  cp;
  cp++;
  }
}

●模拟实现strcmp:

int my_strcmp(const char * src,const char * dst)
{
int ret = 0;
while(!(ret =*(unsignedchar*)src-*(unsignedchar*)dst)&&*d
st)
   ++src,++dst;
   if(ret < 0)
   ret = -1;
else if(ret > 0)
   ret = 1;
return(ret);
}

●模拟实现memcpy:

void *memcpy(void * dst,const void * src,size_tcount)
{
void *ret = dst;
while(count--)
  {
     *(char*)dst=*(char*)src;
     dst=(char*)dst+1;
     src=(char*)src+1;
  }
return(ret);
}

●模拟实现memmove:

void * memmove(void *dst,const void * src,size_tcount)
{
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);
}

猜你喜欢

转载自blog.csdn.net/dreamispossible/article/details/80145839