/* 模拟实现strlen的三种方式 */ int myStrlen(const char *str) {//方式1,计数器方式 int count = 0; while (*str != '\0') { count++; str++; } return count; } int myStrlen2(const char *str) {//方式2:不创建临时变量 if (*str == '\0') { return 0; } else { return 1 + myStrlen2(str+1); } } int myStrlen3(const char *str) {//方式3:指针-指针方式 char *p = str; while (*p != '\0') { p++; } return p - str; } [cpp] view plain copy //模拟实现strcpy char *my_strcpy(char *dest, const char *src) { char *ret = dest; assert(*dest); assert(src); while (*dest++ = *src++)//注意这里不能是(*dest)++ = (*src)++,要分清这两者的区别 { ; } return ret; } [cpp] view plain copy //模拟实现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; } [cpp] view plain copy //模拟实现strstr char *my_strstr(const char*str1, const char *str2) { assert(str1); assert(str2); char *cp = (char *)str1; char *substr = (char *)str2; char *s1 = NULL; if (*str2 == '\0') { return NULL; } while (*cp) { s1 = cp; substr = str2; while (*s1&&*substr && (*s1 == *substr)) { s1++; substr++; } if (*substr == '\0') { return cp; } cp++; } } [cpp] view plain copy //模拟实现strcmp int my_strcmp(const char *src, const char *dst) {//将src中的字符串拷贝进dst int ret = 0; while (!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) { ++src; ++dst; } if (ret < 0) { ret = -1; } else if (ret>0) { ret = 1; } return ret; } [cpp] view plain copy //模拟实现memcpy void *my_memcpy(void *dst, const void *src, int count) {//注意:以memcpy开头的函数操作的基本单位都是字节 void *ret = dst; while (count--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret; } [cpp] view plain copy //模拟实现memmove void *my_memmove(void *dst,const void *src,int 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; }

浙公网安备 33010602011771号