总结一下模拟的各种库函数
来源:互联网 发布:登陆淘宝账号 编辑:程序博客网 时间:2024/05/18 01:12
#include<stdio.h>
#include<string.h>
#include <assert.h>
1.模拟strcmp函数
int my_strcmp(const char *str1, const char *str2)
{
assert(str1 != NULL);
assert(str2);
while(*str1 == *str2)
{
if(*str1 == '\0')
return 0;
str1++;
str2++;
}
//return *str1-*str2;
if(*str1 > *str2)
return -1;
else
return 1;
}
2.模拟strncmp函数
int my_strcmp(const char *dest, const char *src, int len)
{
assert(dest);
assert(src);
while (len--)
{
if (*dest == *src)
{
dest++;
src++;
}
}
if (len == 0)
return 0;
else
if(*str1 > *str2)
return -1;
else
return 1;
}
int main()
{
char arr1[] = "abcdeff";
char arr2[] = "abcd";
int len = sizeof(arr1) / sizeof(arr1[0]);
int ret = my_strcmp(arr1, arr2, len);
printf("%d", ret);
system("pause");
return 0;
}
int main()
{
int ret=0;
char *p1 = "abcd";
char *p2 = "abc";
ret=my_strcmp(p1, p2);
printf("%d",ret);
return 0;
}
3.模拟strcat
char *my_strcat(char* dest, const char* src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
//找目标的‘\0’
while(*dest != '\0')
{
dest++;
}
//拷贝
while(*dest++=*src++)
{
;
}
/*while(*src != '\0')
{
*dest++ = *src++;
}*/
return ret;
}
int main()
{
char arr[20] = "hello ";
//strcat(arr, "bit.");
my_strcat(arr, "bit.");
printf("%s\n", arr);
return 0;
}
void* my_memcpy(void *dest, const void*src, size_t num)
{
void *ret = dest;
char *pdest = (char *)dest;
char *psrc = (char *)src;
assert(dest);
assert(src);
while(num--)
{
*pdest++ = *psrc++;
}
return ret;
}
int main()
{
int i=0;
int arr[] = {1,2,3,4,5,6,7,8,9,0};
int arr2[10] = {0};
/*strcpy((char *)arr2, (char *)arr);*/
my_memcpy(arr2, arr, sizeof(arr));
for(i=0;i<=9;i++)
printf ("%d",arr2[i]);
return 0;
}
4.模拟strncat
char *my_strncat(char *dest, char *src, int len)
{
char *ret = dest;
assert(dest);
assert(src);
while (*dest)
{
dest++;
}
while (len--)
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return ret;
}
int main()
{
char arr[20] = "hello ";
int len = strlen(arr);
char *ret = my_strncat(arr, arr, len-2);
printf("%s", arr);
/*system("pause");*/
return 0;
}
5.模拟strcat
char* my_strcat(char* dest, const char* src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
//找目标的‘\0’
while(*dest != '\0')
{
dest++;
}
//拷贝
while(*dest++=*src++)
{
;
}
/*while(*src != '\0')
{
*dest++ = *src++;
}*/
return ret;
}
int main()
{
char arr[20] = "hello ";
//strcat(arr, "bit.");
my_strcat(arr, "bit.");
printf("%s\n", arr);
return 0;
}
6.模拟memcpy
void* My_memcpy(char* dest, const char* src, int count)
{
assert(dest);
assert(src);
while (count--)
{
*dest ++ = *src ++;
}
return dest;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int str[] = { 5, 6, 7, 8, 9, 0 };
int i = 0;
My_memcpy(arr, str, sizeof(str));
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
7.模拟memmove
void *my_memmove(void *dest,const void *src,int n)
{
/*因为char类型为1字节,所以将数据转化为char*
进行操作。并不是因为操作的对象是字符串*/
char* pdest=(char *)dest;
const char* psrc=(const char *)src;
assert(dest);
assert(src);
if(pdest <= psrc&&pdest >=psrc+n)//正常情况下从前向后拷贝
{
while(n--)
{
*pdest = *psrc;
}
}
else //当出现内存覆盖时从后向前拷贝
{
while(n--)
{
*(pdest+n)=*(psrc+n);
}
}
return dest;
}
int main()
{
char arr[10]="abcdefg";
char arr0[10]="abcdefg";
char arr1[10]={0};
my_memmove(arr+2,arr,4);
my_memmove(arr1,arr0,4);
printf("内存覆盖情况:%s\n",arr+2);
printf("正常情况:%s\n",arr1);
return 0;
}
8.模拟strcpy
char *my_strcpy(char *dest, char *src)
{
assert(dest);
assert(src);
char *ret = dest;
while ((*dest++ = *src++) )//连同‘\0’一起拷贝了
{
;
}
*dest = '\0';
return ret;
}
9.模拟strncpy
char* my_strncpy(char*dest, const char*src, int n)
{
assert(dest);
assert(src);
char*p = dest;
while (n--)
{
*p++ = *src++;
}
*p = 0;
return dest;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int str[] = { 5, 6, 7, 8, 9, 0 };
int i = 0;
int n=0;
scanf("%d",n);
my_strncpy(arr, str, len)
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
return 0;
}
10.模拟strstr
#include <stdio.h>
#include <assert.h>
char * my_strstr( char *dst, const char * src)
{
assert(dst);
assert(src);
int i, j, k;
for (i = 0; dst[i] != '\0'; i++)
{
for (j = i, k = 0; src[k] != '\0'&&dst[j] == src[k]; j++, k++)
{
;
}
if (src[k] == '\0'&&k > 0)
return &dst[i];
}
return NULL;
}
int main()
{
char *p1 = "abcdef";
char *p2 = "cde";
printf("%s\n", my_strstr(p1, p2));
return 0;
}
#include<string.h>
#include <assert.h>
1.模拟strcmp函数
int my_strcmp(const char *str1, const char *str2)
{
assert(str1 != NULL);
assert(str2);
while(*str1 == *str2)
{
if(*str1 == '\0')
return 0;
str1++;
str2++;
}
//return *str1-*str2;
if(*str1 > *str2)
return -1;
else
return 1;
}
2.模拟strncmp函数
int my_strcmp(const char *dest, const char *src, int len)
{
assert(dest);
assert(src);
while (len--)
{
if (*dest == *src)
{
dest++;
src++;
}
}
if (len == 0)
return 0;
else
if(*str1 > *str2)
return -1;
else
return 1;
}
int main()
{
char arr1[] = "abcdeff";
char arr2[] = "abcd";
int len = sizeof(arr1) / sizeof(arr1[0]);
int ret = my_strcmp(arr1, arr2, len);
printf("%d", ret);
system("pause");
return 0;
}
int main()
{
int ret=0;
char *p1 = "abcd";
char *p2 = "abc";
ret=my_strcmp(p1, p2);
printf("%d",ret);
return 0;
}
3.模拟strcat
char *my_strcat(char* dest, const char* src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
//找目标的‘\0’
while(*dest != '\0')
{
dest++;
}
//拷贝
while(*dest++=*src++)
{
;
}
/*while(*src != '\0')
{
*dest++ = *src++;
}*/
return ret;
}
int main()
{
char arr[20] = "hello ";
//strcat(arr, "bit.");
my_strcat(arr, "bit.");
printf("%s\n", arr);
return 0;
}
void* my_memcpy(void *dest, const void*src, size_t num)
{
void *ret = dest;
char *pdest = (char *)dest;
char *psrc = (char *)src;
assert(dest);
assert(src);
while(num--)
{
*pdest++ = *psrc++;
}
return ret;
}
int main()
{
int i=0;
int arr[] = {1,2,3,4,5,6,7,8,9,0};
int arr2[10] = {0};
/*strcpy((char *)arr2, (char *)arr);*/
my_memcpy(arr2, arr, sizeof(arr));
for(i=0;i<=9;i++)
printf ("%d",arr2[i]);
return 0;
}
4.模拟strncat
char *my_strncat(char *dest, char *src, int len)
{
char *ret = dest;
assert(dest);
assert(src);
while (*dest)
{
dest++;
}
while (len--)
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return ret;
}
int main()
{
char arr[20] = "hello ";
int len = strlen(arr);
char *ret = my_strncat(arr, arr, len-2);
printf("%s", arr);
/*system("pause");*/
return 0;
}
5.模拟strcat
char* my_strcat(char* dest, const char* src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
//找目标的‘\0’
while(*dest != '\0')
{
dest++;
}
//拷贝
while(*dest++=*src++)
{
;
}
/*while(*src != '\0')
{
*dest++ = *src++;
}*/
return ret;
}
int main()
{
char arr[20] = "hello ";
//strcat(arr, "bit.");
my_strcat(arr, "bit.");
printf("%s\n", arr);
return 0;
}
6.模拟memcpy
void* My_memcpy(char* dest, const char* src, int count)
{
assert(dest);
assert(src);
while (count--)
{
*dest ++ = *src ++;
}
return dest;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int str[] = { 5, 6, 7, 8, 9, 0 };
int i = 0;
My_memcpy(arr, str, sizeof(str));
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
7.模拟memmove
void *my_memmove(void *dest,const void *src,int n)
{
/*因为char类型为1字节,所以将数据转化为char*
进行操作。并不是因为操作的对象是字符串*/
char* pdest=(char *)dest;
const char* psrc=(const char *)src;
assert(dest);
assert(src);
if(pdest <= psrc&&pdest >=psrc+n)//正常情况下从前向后拷贝
{
while(n--)
{
*pdest = *psrc;
}
}
else //当出现内存覆盖时从后向前拷贝
{
while(n--)
{
*(pdest+n)=*(psrc+n);
}
}
return dest;
}
int main()
{
char arr[10]="abcdefg";
char arr0[10]="abcdefg";
char arr1[10]={0};
my_memmove(arr+2,arr,4);
my_memmove(arr1,arr0,4);
printf("内存覆盖情况:%s\n",arr+2);
printf("正常情况:%s\n",arr1);
return 0;
}
8.模拟strcpy
char *my_strcpy(char *dest, char *src)
{
assert(dest);
assert(src);
char *ret = dest;
while ((*dest++ = *src++) )//连同‘\0’一起拷贝了
{
;
}
*dest = '\0';
return ret;
}
9.模拟strncpy
char* my_strncpy(char*dest, const char*src, int n)
{
assert(dest);
assert(src);
char*p = dest;
while (n--)
{
*p++ = *src++;
}
*p = 0;
return dest;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int str[] = { 5, 6, 7, 8, 9, 0 };
int i = 0;
int n=0;
scanf("%d",n);
my_strncpy(arr, str, len)
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ", arr[i]);
}
return 0;
}
10.模拟strstr
#include <stdio.h>
#include <assert.h>
char * my_strstr( char *dst, const char * src)
{
assert(dst);
assert(src);
int i, j, k;
for (i = 0; dst[i] != '\0'; i++)
{
for (j = i, k = 0; src[k] != '\0'&&dst[j] == src[k]; j++, k++)
{
;
}
if (src[k] == '\0'&&k > 0)
return &dst[i];
}
return NULL;
}
int main()
{
char *p1 = "abcdef";
char *p2 = "cde";
printf("%s\n", my_strstr(p1, p2));
return 0;
}
0 0
- 总结一下模拟的各种库函数
- 总结一下遇到的各种核函数~
- 总结一下遇到的各种核函数~
- 总结一下遇到的各种核函数
- 各种库函数的实现
- 库函数strstr的模拟。。
- C 各种库函数的实现
- 总结一下各种IO方式
- 总结一下/boot分区被删后的各种悲剧
- 总结一下各种IO方式(非常好的文章!)
- 总结一下各种语言按纽事件的找法
- 总结一下ABAP中的各种接口技术
- 总结一下spring框架中的各种注解
- 某些库函数的模拟实现(一)
- 部分库函数的功能分析及模拟实现
- 一大波库函数的模拟实现
- 模拟库函数实现字符串的操作
- 总结一下HBase各种级别的锁以及对读写的阻塞
- "=="操作符和equals方法的区别
- LeetCode | Reverse Linked List II
- 虫食算
- android登录界面小案例
- 6.lz中学
- 总结一下模拟的各种库函数
- 关于二叉树遍历及二叉树面试题目
- 基于Python,Selenium和PhantomJS实现动态页面爬取
- 小算法----寻找插入元素的位置
- 做一个GPSCar类,要求继承Car类,并实现GPS接口
- 浅拷贝和深拷贝
- Poj 2112 Optimal Milking【Floyd+二分+最大流Dinic】
- 如何检测网站的活跃用户与流失用户
- 数据库的隔离级别