strlen(求字符串长度)
unsigned int MyStrlen(const char *str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')
{
count++;
str++;
}
return count;
}
strcpy(字符串拷贝)
char *MyStrcpy(char *arr, const char *str)
{
char *p = arr;
assert((arr != NULL) && (str != NULL));
while (*arr++ = *str++);
return p;
}
strcat(字符串连接)
char *MyStrcat(char *dest, const char *src)
{
char *p = dest;
assert(dest != NULL && src != NULL);
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *src++);
return p;
}
strcmp(字符串比较)
int MyStrcmp(const char *str1, const char*str2)
{
assert((str1 != NULL) && (str2 != NULL));
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
if (*str1 > *str2)
{
return 1;
}
else
{
return -1;
}
}
strncpy(拷贝前n个字符)
char *MyStrncpy(char *dest, const char *src, int n)
{
int i = 0;
char *p = dest;
assert(dest != NULL && src != NULL);
for (i = 0; i < n; i++)
{
*dest++ = *src++;
}
//*dest = '\0';
return p;
}
strncmp(比较前n个字符)
int MyStrncmp(const char *str1, const char*str2, int n)
{
int count = 0;
int diff = 0;
assert((str1 != NULL) && (str2 != NULL));
while (count < n && ((diff = (*str1 - *str2)) == 0) && *str1 != '\0')
{
str1++;
str2++;
count++;
}
return diff;
}
strstr(字符串匹配)
const char *MyStrstr(const char *str1, const char*str2)
{
const char *s1 = str1;
const char *s2 = str2;
const char *start = str1;
assert((str1 != NULL) && (str2 != NULL));
while (*start != '\0')
{
s1 = start;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return start;
}
if (*s1 == '\0')
{
return NULL;
}
start++;
}
}
memcpy(内存拷贝,不能处理重叠空间)
void *MyMemcpy(void *dest, const void *src, size_t count)
{
unsigned int i = 0;
char *p = dest;
assert(dest != NULL&&src != NULL);
while (i++ < count)
{
*(char *)dest = *(char *)src;
((char *)dest)++;
((char *)src)++;
}
return p;
}
memmove(内存拷贝,可处理重叠空间)
void *MyMemmove(void *dest, const void *src, size_t count)
{
unsigned int i = 0;
char *p = dest;
assert(dest != NULL&&src != NULL);
if (src < dest)
{
dest = ((char *)dest) - 1 + count;
src = ((char *)src) - 1 + count;
while (i++ < count)
{
*(char *)dest = *(char *)src;
((char *)dest)--;
((char *)src)--;
}
}
else
{
i = 0;
while (i++ < count)
{
*(char *)dest = *(char *)src;
((char *)dest)++;
((char *)src)++;
}
}
return p;
}