实现部分库函数
来源:互联网 发布:贾森基德生涯数据 编辑:程序博客网 时间: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;
}
运行结果如下:
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
- 实现部分库函数
- 模拟实现部分库函数
- C语言部分库函数实现
- 部分库函数的自我实现
- 字符串的部分库函数的实现
- 字符串的部分库函数的实现
- 部分库函数的功能分析及模拟实现
- string.h中库函数的实现代码(部分)
- c库函数 strring.h字符串操作(部分常用实现)
- c语言部分库函数,代码实现,以及细节理解
- 标准库函数部分简述
- 部分C库函数重写
- 部分库函数源码
- C/C++部分库函数总结
- keil C51部分库函数源代码
- C部分标准库函数用法
- go语言部分runtime库函数
- strcpy()库函数的实现
- 实现5个库函数(my_strcmp strcat strncat my_strlen my_strstr)
- 将一个数组中奇数放在数组前边,偶数放在数组后边
- redis持久化RDB和AOF
- 一个数组中只有两个数是不同的,其他数字是成对出现的,下面代码可将该数组中不同的两数字找出并输出
- 使用冒泡排序多个字符串
- 实现部分库函数
- 远程桌面无法拷贝大文件
- 在二维数组中查找杨氏矩阵
- CodeForces675BRestoring Painting(数学规律计算)
- Dubbo是什么
- 实现简易计算器
- 动态开辟二维数组
- 实现杨辉三角
- WIFI安全攻防