模拟实现strcpy:字符串拷贝
char *my_strcpy(char *dst,const char *src)
{
assert(dst);
assert(src);
char *ret = dst;
while(*dst && *src)
{
*dst = *src;
dst++;
src++;
}
return ret;
}
模拟实现strcat:字符串拼接
char *my_strcat(char *dst,const char *src)
{
assert(dst);
assert(src);
//先找到dst的'\0'
while(*dst++)
;
//再把src的内容一一赋值给dst'\0'往后
while((*dst++ = *src++))
;
return ret;
}
模拟实现strstr:查找子串
char *my_strstr(const char *dst,const char *substr)
{
assert(dst);
assert(substr);
char *ret = (char *)dst;
char *cmp_tmp = (char *)dst;
while(*ret != '\0')
{
cmp_tmp = ret;
char *sub_tmp = (char *)substr;
while(*cmp_tmp && *sub_tmp && (*cmp_tmp == *sub_tmp) )
{
cmp_tmp++;
sub_tmp++;
}
if(*sub_tmp == '\0')
{
return ret;
}
else
ret++;
}
return NULL;
}
模拟实现strcmp:字符串比较
int my_strcmp(const char *str1,const char *str2)
{
assert(str1);
assert(str2);
unsigned char *s1 = (unsigned char *)str1;
unsigned char *s2 = (unsigned char *)str2;
while(*s1 && *s2)
{
//先比较ASCII码的大小
if(*s1 == *s2)
{
s1++,s2++;
}
else if(*s1 > *s2)
{
//str1大于str2
return 1;
}
else
//str1小于str2
return -1;
}
//s1没走完,s2走完了,说明s1比s2长
//则s1大
if(*s1)
{
return 1;
}
//s2没走完,s1走完了,说明s1比s2短
//即s2大
else if(*s2)
{
return -1;
}
//相等
else return 0;
}