【c語言】利用指標模式實現字串函式(strlen、strcat、strstr、strcpy、strcmp、memcpy、memove)
阿新 • • 發佈:2018-12-09
模擬實現strlen
int my_strlen(const char *p)
{
assert(p != NULL);
char *s = p;
while (*p)
{
p++;
}
return p - s;
}
模擬實現strcpy
void my_strcpy(char* dst, const char *src)
{
assert(dst != NULL);
assert(src != NULL);
char *p = dst;
while (*src)
{
*dst = *src;
dst++;
src++;
}
return p;
}
可簡化如下所示
void my_strcpy(char* dst, const char *src)
{
assert(dst != NULL);
assert(src != NULL);
char *p = dst;
while (*dst++ = *src++)
{
;
}
return p;
}
模擬實現stract
char * my_stract(char *dst, const char *src)
{
char *ret = dst;
assert(dst != NULL);
assert (src != NULL);
while (*dst)
{
dst++;
}
while (*dst++ = *src++)
{
;
}
return ret;
}
模擬實現strcmp
int my_strcmp(const char *dst, const char *src)
{
assert(dst != NULL);
assert(src != NULL);
while (*dst == *src)
{
if (*dst == '\0' )
return 0;
dst++;
src++;
}
return *dst - *src;
}
模擬實現strstr
char *my_strstr(const char *str1, const char*str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
char *s1;
char *s2;
char *cur = str1;
while (*cur)
{
s1 = cur;
s2 = str2;
while (&s1&&*s2&&*s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cur;
}
cur++;
}
}
模擬實現memcpy
void my_memmove(void* dst, const void* src, size_t count)
{
assert(dst != NULL);
assert(src != NULL);
void * ret = dst;
if(dst < src)
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
else
{
dst = (char*)dst + count - 1;
src = (char*)src + count - 1;
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char *)dst - 1;
src = (char *)src - 1;
}
}
}
模擬實現memcpy
void * my_memcpy(void *dst, void * src,size_t count)
{
/* assert(dst != NULL);*/
void * ret = dst;
while (count--)
{
*(char *)dst = *(char *)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
int arr1[10] = { 0 };
int arr2[] = { 1, 2, 3, 4, 5 };
my_memcpy(arr1, arr2, 12);
system("pause");
}