- 模拟实现strlen
方法1:
int my_strlen( const char*src)
{
int count = 0;
assert(src != NULL);
while(*src != '\0')
{
count++;
src++;
}
return count;
}
方法2:
int my_strlen( const char*src)
{
char*p = src;
assert(src != NULL);
while(*src != '\0')
{
src++;
}
return src - p;//两个指针指向同一数组空间,两个指针相减指的是相差元素的个数
}
方法3:
int my_strlen( const char*src)
{
if(*src == '\0')
return 0;
else
return 1+my_strlen(src+1);
}
方法4:
int my_strlen( const char*src)
{
int i = 0;
for(i = 0; src[i] != '\0'; i++)
{
;
}
return i;
}
- 模拟实现strcpy
方法1:
my_strcpy(char*dest,const char*src)
{
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
}
方法2:[对方法1的优化]
char* my_strcpy(char*dest,const char*src)
{
char* ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest++ == *src++)
;
return ret;
}
- 模拟实现strcat
char* my_strcat(char*dest, const char*src)
{
char*ret = dest;
assert(dest != NULL);
assert(src! = NULL);
while(*dest != '\0')
{
dest++;
}
while(*dest++ = *src++)
;
return ret;
}
- 模拟实现strstr
char* my_strstr(const char*dest, const char*src)
{
assert(dest != NULL);
assert(src != NULL);
char *start = dest;
char *str1 = dest;
char *str2 = src;
while(*start)
{
str1 = start;
str2 = src;
while(*str1 && *str2 && *str1 == *str2)
{
str1++;
str2++;
}
if(str2 == ‘\0’)
return start;
start++;
}
return NULL;
}
- 模拟实现strcmp
int my_strcmp(const char*str1, const char*str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
while(*str1 == *str2)
{
str1++;
str2++;
}
return *str1 - *str2;
}
- 模拟实现memcpy
void* my_memcpy(void* dest, const void* src, int n)
{
assert(dest != NULL);
assert(src != NULL);
char *str1 = (char *)dest;
char *str2 = (char *)src;
while (n--)
{
*str1++ = *str2++;
}
return dest;
}
- 模拟实现memmove
void* my_memmove(void*dest, const void*src, int count)
{
assert(dest != NULL);
assert(src != NULL);
char *str1 = (char *)dest;
char *str2 = (char *)src;
if(str1 <= str2)
{
while(count--)
{
*str1++ = *str2++;
}
}
else
{
while(count--)
{
*(str1 + count) = *(str2 + count);
}
}
return dest;
}