1.模拟实现strlen
#include#include size_t my_strlen(const char * str) { int count = 0; while (*str) { count++; str++; } return count; } void main() { char *str = "Hello Panana"; printf("%dn", strlen(str)); printf("%dn", my_strlen(str)); }
2.模拟实现strcpy
#include#include #include char *my_strcpy(char *dest, const char*src) { assert(dest != NULL&&src != NULL); char *pdest = dest; const char *psrc = src; while (*psrc != ' ') { *pdest++ = *psrc++; } *pdest = ' '; return dest; } void main() { char str1[20] = "hello Panana"; char *str2 = "monday"; printf("str1 = %sn", str1); char *ret = my_strcpy(str1, str2); printf("str1 = %sn", ret); }
3.模拟实现strcmp
#include#include #include int my_strcmp(const char *string1, const char *string2) { assert(string1 != NULL && string2 != NULL); while (*string1 != ' ' && *string2 != ' ') { if (*string1 > *string2) return 1; else if (*string1 < *string2) return -1; string1++; string2++; } if (*string1 != ' ') return 1; if (*string2 != ' ') return -1; return 0; } void main() { char *str1 = "helloPanana"; char *str2 = "hello"; int res =my_strcmp(str1, str2); printf("str1 = %dn", res); }
4.模拟实现strcat
#include#include #include char* my_strcat(char *Dest, const char *Sour) { assert(Dest != NULL && Sour != NULL); char *pDest = Dest; const char *pSour = Sour; while (*pDest != ' ') { pDest++; } while (*pSour != ' ') { *pDest++ = *pSour++; } *pDest = *pSour; return Dest; } void main() { char str1[20] = "helloPanana"; char *str2 = "hello"; printf("str1 = %sn", str1); char* res = my_strcat(str1, str2); printf("str1 = %sn", res); }
5.模拟实现strstr
#include#include #include 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 == ' ') return NULL; while (*cp) { s1 = cp; substr = str2; while (*s1 && *substr && (*s1 == *substr)) { s1++; substr++; } if (*substr == ' ') return cp; cp++; } } int main() { char *str = "This is a simple string ABC DEF XYZ"; char *pch = strstr(str, "string"); printf("pch = %sn", pch); return 0; }
6.模拟实现memcpy
#include#include #include void* my_memcpy(void *dest, const void *src, size_t count) { assert(dest != NULL && src != NULL); char *pdest = (char *)dest; const char *psrc = (const char *)src; if (psrc >= pdest || psrc + count <= pdest) { while (count-- != 0) { *pdest++ = *psrc++; } } else { pdest = pdest + count - 1; psrc = psrc + count - 1; while (count-- != 0) { *pdest-- = *psrc--; } } return dest; } void main() { char str[] = "1234567890"; my_memcpy(str + 2, str, 4); printf("str = %sn", str); }
7.模拟实现memmove
#include#include #include void * my_memmove(void * dst, const void * src, size_t 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); } void main() { char str[] = "1234567890"; my_memmove(str + 2, str, 4); printf("str = %sn", str); }



