1.1 strlen
size_t strlen (const char * str);
1.strlen返回在字符串中‘\0’ 前面出现的字符个数(不包含'\0')
2.参数所指向的字符串必须以'\0'结尾,否则函数将返回随机值
3.函数返回类型为size_t,属于无符号数
1.1.2 strlen函数的模拟实现(三种方法)
1.计数器方式
int my_strlen(const char* str)
{
int count=0;
while(*str)
{
count++;
str++;
}
return count;
}
2.不创建临时变量的递归方法
int my_strlen (const char * str)
{
if(*str == '\0')
return 0;
else
return my_strlen(str+1)+1;
}
3.指针相减得到元素个数的方式
int my_strlen(char * str)
{
char *p = str;
while(*p != '\0' )
p++;
return p-s;
}
1.2 strcpy
char* strcpy(char * destination, const char * source );
1.源字符串必须以'\0'结束
2.源字符串中的'\0'也会被拷贝至目标空间
3.目标空间必须足够大且可变
1.2.2 strcpy模拟实现
char *my_strcpy(char *dest, const char*src)
{
assert(dest && src);
char *ret = dest;
while(*dest++ = *src++)
{
;
}
return ret;
}
1.3 strcat
char * strcat(char * destination, const char * source);
1,源字符串必须以'\0' 结束
2.目标空间必须足够大并且可修改
1.3.2 模拟实现 strcat
char *my_strcat(char *dest, const char *src)
{
assert(dest && src);
char *ret = dest;
while(*dest)
{
dest++;
}
while(*dest++ = *src++)
{
;
}
return ret;
}
1.4 strstr
char * strstr( const char *str1, const char *str2);
1,该函数用于查找str2是否为str1的子串
2.若是的话,返回str2中第一个与str1相同的字符的地址
3.若str2不是str1的一部分,则返回空指针
1.4.2 模拟实现strstr
char * strstr(const char *str1, const char *str2)
{
char *cp = (char*) str1;
char *s1;
char *s2;
if(!*str2)
{
return ((char * )str1);
}
while (*cp)
{
s1=cp;
s2=(char *)str2;
while(!(*s1-*s2) && *s1 && *s2)
{
s1++,s2++;
}
if(!*s2)
return cp;
cp++
}
return NULL;
}