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;
}
运行结果如下:
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;
}
运行结果如下:
本文出自 “零点时光” 博客,请务必保留此出处http://10741764.blog.51cto.com/10731764/1716851