模拟实现
#include <cstring>
#include <cassert>
using namespace std;
int my_strlen1(const char *str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen1(str + 1);
}
size_t my_strlen2(const char *str)
{
const char *end = str;
while (*end != '\0')
end++;
return end - str - 1;
}
size_t my_strlen3(const char *str)
{
assert(str);
size_t count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
char *my_strcpy(char *dest, const char *src)
{
char *cur = dest;
while ((*cur++ = *src++) != '\0')
;
return dest;
}
char *my_strncpy(char *dest, const char *src, size_t n)
{
char *cur = dest;
while (n-- && (*cur++ = *src++) != '\0')
;
while (n--)
*cur++ = '\0';
return dest;
}
int my_strcmp(const char *str1, const char *str2)
{
while (*str1 && (*str1 == *str2))
{
str1++;
str2++;
}
return (unsigned char)(*str1) - (unsigned char)(*str2);
}
char *my_strcat(char *dest, const char *src)
{
assert(dest && src);
char *ret = dest;
while (*dest)
dest++;
while ((*dest++ = *src++))
{
;
}
return ret;
}
char *my_strstr(const char *str1, const char *str2)
{
if (str2 == nullptr || *str2 == '\0')
return (char *)str1;
char *cur = (char *)str1;
char *s1, *s2;
while (*cur)
{
s1 = cur;
s2 = (char *)str2;
while (*s1 && *s2 && *s1 == *s2)
s1++, s2++;
if (*s2 == '\0')
return cur;
cur++;
}
return NULL;
}