模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove

模拟实现:

strstr

strcpy

strlen

strcat

strcmp

memcpy

memmove

================================

1 strstr 字符串中查找子字符串

char * my_strstr(const char *dest, const char *src)
{
 const char *ret = dest;
 const char *p = dest;
 const char *q = src;
 assert(dest != NULL && src != NULL);
while(ret)
{
q = src;
while(*p == *q)
{
p++;
q++;
}
if(*q == '\0')
{
return (char *)ret;
}
else
{
p = ++ret;
}
}
return NULL;
}

===========================================

2 strcpy 字符串复制

char *my_strcpy(char *dest,const char *src)
{
char *ret = dest;
assert(dest);
assert(src);
while(*dest++ = *src++)
{
;
}
return ret;
}

==========================================

3 strlen 测字符串长度

int my_strlen(const char *s)
{
const char *p = s;
while(*s)
{
s++;
}
return s - p;
}

==========================================

4 strcat 连接字符串

char * my_strcat(char *dest, const char *src)
{
char *ret = dest;
assert(dest);
assert(src);
while(*dest)
{
dest++;
}
while(*dest++ = *src++)
{
;
}
return ret;
}

=========================================

5 strcmp 字符串复制

int my_strcmp(const char *s1, const char *s2)
{
assert(s1);
assert(s2);
while(*s1 == *s2)
{
if(*s1 == '\0')
{
return 0;
}
s1++;
s2++;
}
return (*s1 - *s2 > 0 ? 1 : -1);
}

============================================

6 memcpy 内存复制

void * my_memcpy(void *buf1,const void *buf2,int count)
{
void *ret = buf1;
char *dest = (char *)buf1;
char *src = (char *)buf2;
assert(buf1);
assert(buf2);
while(count--)
{
*dest++ = *src++;
}
return ret;
}

=====================================================

7 memmove 内存移动

void *my_memmove(void *buf1, const void *buf2,int count)
{
void *ret = buf1;
char *dest = (char *)buf1;
char *src = (char *)buf2;
assert(buf1);
assert(buf2);
if(dest > src && dest < src + count)//重叠时从后向前移动
{
while(count--)
{
*(dest + count) = *(src + count);
}
}
else 
{
while(count--)
{
*dest++ = *src++;
}
}
return ret;
}


本文出自 “城市猎人” 博客,请务必保留此出处http://alick.blog.51cto.com/10786574/1719727

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值