1.模拟实现strcmp
(1)strcmp比较两个字符串,设这两个字符串为p1,p2,若p1等于p2,则返回零;若p1小于p2,则返回负数;若p1大于p2,则返回正数。
(2)模拟实现
int Mystrcmp(const char* p1, const char* p2) //比较字符串大小 { while (*p1 == *p2) { if (*p1 == '\0') return 0; p1++; p2++; } return *p1 - *p2; }
2.模拟实现strstr
(1)strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。
(2)模拟实现
char* Mystrstr(const char* str1, const char* str2) { const char* s1 = NULL; const char* s2 = NULL; char* cur = str1; if (*str2 == '\0') return (char*)str1; while (*cur) { s1 = cur; s2 = str2; while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2) { s1++; s2++; } if (*s2 == '\0') return cur; cur++; } return NULL; }
3.模拟实现strcpy
(1)strcpy()它的作用是进行字符串拷贝。strcpy()必须包含两个参数,strcpy(err2,err),将err里面的内容拷贝到err2里面去。
(2)模拟实现
char* Mystrcpy(char* err2,char*err) { char* ret = err2; while (*err2++ = *err++) { ; } return ret; //字符串拷贝 }
4.模拟实现strcat
(1)char * strcat ( char * err2, const char * err1 );
向err2所指向的字符串后追加err1所指向的字符串中的内容
(2)模拟实现
char* Mystrcat(char* err2, char* err1) { char* re = err1; while (*err1 != '\0') { err1++; } while (*err1++ = *err2++) { ; } return re; //字符串追加 }
1.内存拷贝函数memcpy()模拟实现
(1)void *memcpy( void *dest, const void *src, size_t num);
(2)函数memcpy从src的位置开始向后复制num个字节的数据到dest的内存位置。
(3)如果src和dest有任何的重叠,复制的结果都是未定义的
(4)模拟实现
void* My_memcpy(void* dest, void* src, size_t sum) { assert(dest && src); void* cur = dest; while (sum--) { *(char*)dest= *(char*)src; ((char*)dest)++; ((char*)src)++; } return cur; }
2.内存拷贝函数memmove()模拟实现
(1)和memcpy()的差别就是源内存块和目标内存块是可以重叠的
(2)模拟实现
void* My_memove(void* dest, void* src, size_t sum) { assert(dest && src); void* cur = dest; if (dest<src) //前到后 { while (sum--) { *(char*)dest= *(char*)src; ((char*)dest)++; ((char*)src)++; } } else//后到前 { while (sum--) { *((char*)dest + sum) = *((char*)src + sum); } } return cur; }