模拟实现strlen的三种方式
//模拟实现strlen的三种方式 #include<stdio.h> #include<assert.h> int my_strlen1(const char * str)//计数器方式 { int count = 0; assert(str != NULL); while (*str) { count++; str++; } return count; } int my_strlen2(const char * str)//递归 { assert(str != NULL); if (*str == '\0') return 0; else return 1 + my_strlen2(str + 1); } int my_strlen3(char * str)//指针 { char *p = str; while (*p != '\0') p++; return p - str; } int main() { char arr[] = "abcdef"; int len1 = my_strlen1(arr); int len2 = my_strlen2(arr); int len3 = my_strlen3(arr); printf("%d\n", len1); printf("%d\n", len2); printf("%d\n", len3); system("pause"); return 0; }
模拟实现strcpy
char *my_strcpy(char *dest, const char*src) { char *ret = dest; assert(dest != NULL); assert(src != NULL); while ((*dest++ = *src++)) { ; } return ret; }
模拟实现strcat
char *my_strcat(char*dest, const char*src) { char *ret = dest; assert(dest != NULL); assert(src != NULL); while (*dest) { dest++; } while ((*dest++ = *src++)) { ; } return ret; }
模拟实现strstr
char *my_strstr(const char*str,const char * substr) { const char *s1; const char *s2; const char *cur = str; assert(str != NULL); assert(substr != NULL); if (*substr == '\0') return (char*)str; while (*cur) { s1 = cur; s2 = substr; while (*s1&&*s2 && (*s1 == *s2)) { s1++; s2++; } if (*s2 == '\0') { return (char*)str; } cur++; } return NULL; } int main() { const char *p = "abcdef"; char *ret = my_strstr(p, "def"); if (ret == NULL) { printf("不存在\n"); } else { printf("%s\n", ret); } system("pause"); return 0; }
模拟实现strchr
char *my_strchr(const char *dest, const char c) { assert(dest!=NULL); while (*dest) { if (*dest == c) { return dest; } dest++; } return NULL; } int main() { const char *p = "abcdef"; char *ret = my_strchr(p, "d"); if (ret == NULL) { printf("不存在\n"); } else { printf("%s\n", ret); } system("pause"); return 0; }
模拟实现strcmp
int my_strcmp(char* src, const char* dest) { while (*src = *dest) { if (*src == '\0') { return 0; } src++; dest++; } return *src - *dest; } int main() { const char *p = "abqdef"; const char *q = "abbbbbbbb"; int ret = my_strcmp(p, q); if(ret >0) { printf("p>q\n"); } else if(ret <0) { printf("p<q\n"); } else { printf("p==q\n"); } return 0; }
模拟实现memcpy
void * my_memcpy(void *dest,void *src,int count) { void *ret = dest; while (count--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } return ret; }
模拟实现memmove
void* my_memmove(void *dest, const void*src, size_t count) { void *ret = dest; assert(dest != NULL); assert(src != NULL); if (dest<src) { //前->后 while(count--) { *(char *)dest = *(char*)src; dest = (char *)dest+1; src = (char*)src+1; } } else { //后->前 while(count--) { *((char *)dest+count) = *((char*)src+count); } } return ret; } int main() { int arr1[10] = {0}; int arr2[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; my_memcpy(arr2, arr1, 20); return 0; }