字符串操作函数
- strcpy
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL && src != NULL);
char* arr = dest;
while ((*dest++ = *src++) != '\0');
return arr;
}
- strcat
char* my_strcat(char* dest, const char* src)
{
assert(dest != NULL && src != NULL);
char* arr = dest;
while (*dest != '\0')
{
dest++;
}
while ((*dest++ = *src++) != '\0');
return arr;
}
- strstr
char* my_strstr(const char* str, const char* substr)
{
assert(str != NULL && substr != NULL);
if (*substr == '\0')
{
return (char*)str;
}
char* str1 = NULL;
char* str2 = NULL;
char* rst = (char*)str;
while (*rst != '\0')
{
str1 = rst;
str2 = (char*)substr;
while (*str2 != '\0' && *str1 == *str2)
{
++str1;
++str2;
}
if (*str2 == '\0')
{
return rst;
}
++rst;
}
return NULL;
}
- strchr
char* my_strchr(const char *str, char ch)
{
assert(str != NULL);
char* s = (char*)str;
while (*s != '\0')
{
if (*s == ch)
{
return s;
}
++s;
}
return NULL;
}
- strcmp
int my_strcmp(const char* lhs, const char* rhs)
{
assert(lhs != NULL && rhs != NULL);
char* str1 = (char*)lhs;
char* str2 = (char*)rhs;
while (*str1 != '\0' && *str2 != '\0')
{
if (*str1 < *str2)
{
return -1;
}
else if (*str1 > *str2)
{
return 1;
}
else
{
++str1;
++str2;
}
}
if (*str1 == '\0' || *str2 == '\0')
{
if (*str1)
{
return 1;
}
else if (*str2)
{
return -1;
}
}
return 0;
}
- memcpy
void* my_memcpy(void *dest, const void *src, size_t count)
{
assert(dest != NULL && src != NULL);
void* rst = dest;
while (count--)
{
*(unsigned char*)dest = *(unsigned char*)src;
++(unsigned char*)dest;
++(unsigned char*)src;
}
return rst;
}
- memmove
void* my_memmove(void* dest, const void* src, size_t count)
{
assert(dest != NULL && src != NULL);
void* rst = dest;
if (dest <= src || (unsigned char*)dest >= (unsigned char*)src + count)
{
while (count--)
{
*(unsigned char*)dest = *(unsigned char*)src;
++(unsigned char*)dest;
++(unsigned char*)src;
}
}
else
{
while (count)
{
*((unsigned char*)dest + count - 1) = *((unsigned char*)src + count - 1);
count--;
}
}
return rst;
}