模拟实现strlen
//不创建临时变量的计数器
int Strlen(const char *str)
{
if (str == '\0')
return 0;
else
return 1 + Strlen(str + 1);
}
//指针-指针
int Strlen(char *s)
{
char*p = s;
while (*p != '\0')
{
p++;
}
return p - s;
}
模拟实现strcpy
//模拟实现 strcpy
char *Strcpy(char *des, const char *src)
{
char *ret = des;
assert(des != NULL);
assert(src != NULL);
while ((*des++ = src++))
{
;
}
return ret;
}
模拟实现 strcat
//模拟实现strcat
char *Strcat(char *des, const char *src)
{
char *ret = des;
assert(des != NULL);
assert(src != NULL);
while (*des)
{
des++;
}
while ((*des++ = src++))
{
;
}
return ret;
}
模拟实现 strstr
//模拟实现strstr
const char *my_strstr(const char *str, const char *sub_str)
{
for (int i = 0; str[i] != '\0'; i++)
{
int tem = i;
int j = 0;
while (str[i++] == sub_str[j++])
{
if (sub_str[j] == '\0')
{
return &str[tem];
}
}
i = tem;
}
return NULL;
}
//模拟实现strcmp
int strcmp(const char* str1, const char* str2)
{
int ret = 0;
while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str1)
{
str1++;
str2++;
}
if (ret < 0)
{
return -1;
}
else if (ret > 0)
{
return 1;
}
return 0;
}
//模拟实现 memcpy
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}
// 模拟实现memmove
void* memmove(void* dst, const void* src, size_t count)
{
assert(NULL != src && NULL != dst);
char* tmpdst = (char*)dst;
char* tmpsrc = (char*)src;
if (tmpdst <= tmpsrc || tmpdst >= tmpsrc + count)
{
while (count--)
{
*tmpdst++ = *tmpsrc++;
}
}
else
{
tmpdst = tmpdst + count - 1;
tmpsrc = tmpsrc + count - 1;
while (count--)
{
*tmpdst-- = *tmpsrc--;
}
}
return dst;
}