strlen函数的模拟实现
#include <stdio.h> int my_strlen(char* ps) { int count = 0; while (*ps++) { count++; } return count; } int main() { char str[] = "abcdefgh"; int len = my_strlen(str); printf("%d ", len); return 0; }
输出结果为:8
strcpy函数的模拟实现
char* my_strcpy(char* dest,const char* src) { char* ret = dest; assert(dest && src); assert((int)strlen(dest) > (int)strlen(src)); while (*dest++ = *src++) { ; } return ret; } int main() { char str1[] = "hello C"; char str2[] = "hello world"; my_strcpy(str2, str1); printf("%s", str2); return 0; }
输出结果为:Hello C
strcmp函数的模拟实现
int my_strcmp(const char* pstr1, const char* pstr2) { assert(pstr1 && pstr2); while (*pstr1 || *pstr2) { if (*pstr1 > *pstr2) { return 1; } else if (*pstr1 < *pstr2) { return -1; } pstr1++; pstr2++; } return 0; } int main() { char str1[] = "hello bit"; char str2[] = "hello world"; char str3[] = "hello bit"; int ret1 = my_strcmp(str1, str2);//-1 int ret2 = my_strcmp(str2, str1);//1 int ret3 = my_strcmp(str1, str3);//0 printf("%d %d %d\n", ret1, ret2, ret3); return 0; }
输出结果:-1 1 0
strcat函数的模拟实现
char* my_strcat(char* dest, const char* src) { assert(dest && src); char* ret = dest; int len = strlen(dest); dest += len; while (*dest++ = *src++) { ; } return ret; } int main() { char str1[50] = "hello C"; char str2[20] = "hello world"; my_strcat(str1, str2); printf("%s\n", str1); return 0; }
输出结果为:hello Chello world
strstr函数的模拟实现
char* my_strstr(const char* dest, const char* src) { assert(dest && src); assert((int)strlen(dest) >= (int)strlen(src)); const char* ret = dest; const char* src1 = src; while (*dest) { if (*dest == *src) { dest++; src++; } else { ++ret; dest = ret; src = src1; } if (*src == '\0') { return ret; } } return NULL; } int main() { char string[] = "The quick brown dog jumps over the lazy fox"; char str[] = "lazy"; printf("%s", my_strstr(string, str)); return 0; }
输出结果为:lazy fox
memcopy函数的模拟实现
void* my_memcpy(void* dest, const void* src, size_t count) { void* ret = dest; while (count--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } return ret; } int main() { //int arr[5] = { 1,2,3,4,5 }; //int copy[5]; char arr[] = "Hello World"; int len = strlen(arr); char copy[20] = { 0 }; my_memcpy(copy, arr, len+1); printf("%s\n",copy); for (int i = 0; i < 20; i++) { printf("%c",copy[i]); } return 0; }
输出结果为:Hello World
Hello World
memmove函数的模拟实现
void* my_memmove(void* dest, const void* src, size_t count) { void* ret = dest; if (dest <= src || (char*)dest >= (char*)src + count) { while (count--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } else { dest = (char*)dest + count - 1; src = (char*)src + count - 1; while (count--) { *(char*)dest = *(char*)src; dest = (char*)dest - 1; src = (char*)src - 1; } } return ret; } int main() { char src[] = "Hello World"; char dest[] = "Hello World"; memmove(src, src+2, 4); printf("%s\n", src); my_memmove(dest, dest + 2, 4); printf("%s\n", dest); int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; memmove(arr+2, arr + 1, 3); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); int a[10] = { 1,2,3,4,5,6,7,8,9,10 }; my_memmove(a + 2, a + 1, 3); for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } return 0; }
输出结果为:llo o World
llo o World
1 2 2 4 5 6 7 8 9 10
1 2 2 4 5 6 7 8 9 10