实现部分库函数

来源:互联网 发布:贾森基德生涯数据 编辑:程序博客网 时间:2024/05/27 03:26

1.模拟实现strncat

//与strcat无异,只是追加的块大小不一样,strncat只是向后追加n个字节的内

char *my_strncat(char * dst, const char *src,

int count)
{
char *p = dst;
while (*dst)
{
dst++;
}
while (count--)       // 用数count控制循环的次数
*dst++ = *src++;
}
*dst = '\0';
return p;
}

2.模拟实现strncmp

//与strcmp无异,只是比较的块大小不一样,strncmp只是向后比较n个字节的内容

int my_strncmp(const char *src, const char

*dst, int count)
{
int ret = 0;
while (!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *src && *dst)

{
while (count--)
{
src++;
dst++;
}
if (!count)
break;

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

}

3.模拟实现strncpy

//与strcpy无异,只是拷贝的块大小不一样,strncpy只是向后拷贝n个字节的内容

char *my_strncpy(char * dst, const char *src, int count)
{
char *p = dst;
while (count--)
{
*dst++ = *src++;
}

*dst = '\0';
return p;

}

4.模拟实现atof

代码如下:

double _atof(const char *str)

{

double ret = 0.0;

int flag = 1,i=-1;

while (isspace(*str))

{

str++;

}

if (*str == '+')

{

str++;

}

else if (*str == '-')

{

str++;

flag = -1;

}

while (*str)

{

if (*str >= '0' && *str <= '9')

{

ret = ret * 10.0 + (*str - '0');

}

else if (*str == '.')

{

str++;

break;

}

str++;

}

while (*str)

{

ret = ret + (*str - '0')*pow(10,i);

i--;

str++;

}


return flag*ret;

}


测试用例如下:

int main()

{

char arr[] = "-123.45";

double ret=_atof(arr);

cout << ret << endl;

system("pause");

return 0;

}

运行结果如下:

wKiom1bECmKS994iAAAP4PHv9q4083.png 

spacer.gif

5.模拟实现memset:

void *_memset(void *dst,int val,size_t count)

{

  void *start = dst;

  while (count--)  

    {

     *(char *)dst = (char)val;

     dst = (char *)dst + 1;

    }


return(start);

}


6.模拟实现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);

}

测试用例如下:

int main()

{

char arr[] = "qwert";

char arr1[10] = {0};

memmove(arr1, arr, 3);

cout << arr1 << endl;

system("pause");

return 0;

}


运行结果如下:

wKioL1bEFoqhfoukAAAQ_iBJJBw477.png

本文出自 “零点时光” 博客,请务必保留此出处http://10741764.blog.51cto.com/10731764/1716851

0 0
原创粉丝点击