1.模拟实现strcpy函数拷贝字符串
#include<stdio.h> #include<assert.h> char* my_strcpy(char* dest,const char *src) { char* ret = dest; assert(dest != NULL); assert(src != NULL); while(*dest++ = *src++) { ; } return ret;} int main() { char arr1[10] = “abcdef”; char arr2[10] = {0}; printf("%s\n",my_strcpy(arr2,arr1)); return 0; }
1234567891011121314151617181920212.模拟实现strcat函数连接字符串
#include<stdio.h> #include<assert.h> char* my_strcat(char* arr1,const char* arr2) { char *ret = arr1; assert(arr1 != NULL); assert(arr2 != NULL); while(*arr1 != '\0') { *arr1++; } while(*arr1++ = *arr2++) { ; } return ret;} int main() { char arr1[20] = “hello”; char arr2[20] = " bit"; printf("%s\n",my_strcat(arr1,arr2)); return 0; }
123456789101112131415161718192021222324253.模拟实现strstr查找字符串
#include<stdio.h> #include<assert.h> char* my_strstr(const char*str1,const char*str2) { const char *s1 = str1; const char *s2 = str2; const char *cp = str1; assert(str1 != NULL); assert(str2 != NULL); if(*str2 == '\0') return (char*)str1; while(*cp) { s1 = cp; s2 = str2; while(*s1 && *s2 && *s1 == *s2) { s1++; s2++; } if(*s2 == '\0') return (char *)cp; cp++; } return NULL;} int main() { char *p1 = “bbc”; char *p2 = “abbcdef”; char *ret = my_strstr(p2,p1); printf("%s\n",ret); return 0; }
123456789101112131415161718192021222324252627282930313233343536374.模拟实现strchr,含义是查找字符串s中首次出现c的位置。
#include<stdio.h> char* my_strchr(char* s,char c) { while(*s != '\0' && *s != 'c') { s++; } return *s == c?s:NULL; } int main() { char* arr = "abcdefg"; int ret = my_strchr(arr,'c'); printf("%s\n",ret); return 0;}
12345678910111213141516175.模拟实现strcmp函数比较两个字符串的大小
#include<stdio.h> #include<assert.h> int my_strcmp(const char* str1,const char* str2) { assert(str1 != NULL); assert(str2 != NULL); while(*str1 == *str2) { if(*str1 == '\0') { return 0; } str1++; str2++; } return *str1 - *str2; } int main() { int ret = my_strcmp("abcdef","abc"); printf("%d",ret); } 123456789101112131415161718192021226.模拟实现memcpy拷贝内存 拷贝的是字节数
#include<stdio.h> #include<assert.h> void* my_memcpy(void* dest,void* src ,int count) { void* ret = dest; assert(dest != NULL); assert(src != NULL); while(count--) { *(char*)dest = *(char*)src; ((char*)dest)++; ((char*)src)++; } return ret;} int main() { int arr1[] = {1,2,3,4,5,6}; int arr2[20] = {0}; my_memcpy(arr2,arr1,12); return 0; }
12345678910111213141516171819202122237.实现memmove在一个内存中进行拷贝
#include<stdio.h> #include<assert.h> void* my_memmove(void* dest,void* src,int count) { void* ret = dest; assert(dest); assert(src); if(dest<src) { while(count--) { *((char*) dest) =*((char*) src); ((char*) dest)++; ((char*) src)++; } } else { while(count--) { *((char*) dest+count) = *((char*) src+count); } } return ret;} int main() { int arr1[] = {1,2,3,4,5,6,7}; my_memmove(arr1,arr1+2,16); return 0; }
1234567891011121314151617181920212223242526272829303132 </div> <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e9f16cbbc2.css" rel="stylesheet"> </div>