//size_t实为unsigned int
size_t my_strlen(const char* str)
{
assert(str);
/*int count = 0;
while (*str++)
{
count++;
}
return count;*/
//递归实现
/*if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
*/
//指针-指针
const char* tail = str;
while (*tail)
{
tail++;
}
return tail - str;
}
//strcat模拟
char* my_strcat(char* dst, const char* src)
{
assert(dst && src);
char* ret = dst;
//找到dst的'\0'
while (*dst)
{
dst++;
}
//追加/拷贝
while (*dst++ = *src++)
{
;
}
return ret;
}
//strncat模拟
char* my_strncat(char* dst, const char* src, size_t count)
{
assert(dst && src);
char* ret = dst;
while (*dst)
{
dst++;
}
while (count-- > 0 && (*dst++ = *src++))
{
;
}
*dst = '\0';
return ret;
}
//将src的字符内容拷贝到dest中,包括'\0'
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
//将src中count个字符拷贝到dst中,如过src的长度小于count,则缺少的用'\0'补充
char* my_strncpy(char* dst, const char* src, size_t count)
{
assert(dst && src);
unsigned int i = 0;
char* ret = dst;
for (i = 0; i < count; i++)
{
if (*src == '\0')
{
*dst++ = '\0';
}
else
{
*dst++ = *src++;
}
}
//*dst = '\0';
return ret;
}
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}