1.模拟实现strlen
//方式1.计数器方式
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
//方式2.不创建临时变量计数器(递归)
int my_strlen(const char * str)
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
//方式3.指针-指针的方式
int my_strlen(char*s)
{
char*p=s;
while(*p!=‘\0’)
p++;
returnp-s;
}
2.模拟实现strcmp
//方式1
int my_strcmp(const char* dst, const char* src)
{
assert(dst && src);
while (*dst != '\0' && *src != '\0')
{
if (*dst < *src)
{
return -1;
}
else if (*dst > *src)
{
return 1;
}
else
{
;
}
++dst;
++src;
}
if (*dst == '\0' && *src == '\0')
{
return 0;
}
else if (*dst != '\0'&& *src == '\0' )
{
return 1;
}
else if (*src != '\0' && *dst == '\0')
{
return -1;
}
}
//方式2.
int my_strcmp(const char* src, const char* dst)
{
int ret = 0;
assert(dst && src);
while (!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src,++dst;
if (ret < 0)
ret = -1;
else if (ret > 0)
ret = 1;
return (ret);
}
3.模拟实现strcat
char *my_strcat(char *des, char *src)
{
assert(des && src);
char *p = des;
while (*des)
{
++des;
}
while (*src)
{
*des = *src;
++des;
++src;
}
*des = '\0';
return p;
}
4.模拟实现strstr
char * my_strstr(const char* str1, const char* str2)
{
const char* str_1 = str1;
const char* str_2 = str2;
while (*str1)
{
while (*str_2 == *str_1 && *str_2 != '\0')
{
++str_2, ++str_1;
}
if(*str_2 == '\0')
{
return str1;
}
else
{
str_2 = str2;
++str1;
str_1 = str1;
}
}
}
5.模拟实现strchr
const char* Mystrchr(const char*dst, const char str) {
assert(dst != NULL);
while (*dst && *dst != str)
dst++;
return(dst);
}
6.模拟实现memcmp
void* my_memcpy(void* dst, const void* src, size_t num)
{
assert(dst && src);
char* str_dst = (char*)dst;
char* str_src = (char*)src;
for (size_t i = 0; i < num; ++i)
{
str_dst[i] = str_src[i];
}
return dst;
}
7.模拟memmove
void * 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);
}