1.strlen():求字符串长度函数,遇到'\0'结束
函数原型:size_t strlen(const char * str)
参数指向的字符串必须以‘\0’结尾
返回值size_t是无符号的
1)使用一个计数器
int my_strlen(const char* str)
{
int count=0;
while (*str)
{
str++;
count++;
}
return count;
}
2)用递归的方法
int my_strlen(const char* str)
{
if (*str=='\0')
return 0;
else
return 1 + my_strlen(str+1);
}
3)使用指针-指针的方法
int my_strlen(char* str)
{
char *p = str;
while (*p != 0)
p++;
return p - str;
}
2.strcpy()函数:字符串拷贝函数
函数原型:char* strcpy(char * destination,const char * source)
注意事项:
- 源字符串必须以‘\0’结束
- 会将源字符串中的‘\0’拷贝到目标空间
- 目标空间必须足够大
- 目标空间必须可变
char* my_strcpy(char* dest, const char* src)
{
char *ret = dest;
assert(dest!=NULL);
assert(src!=NULL);
while ((*dest++ = *src++))
{
;
}
return ret;
}
3.strcat():字符串拼接函数,将俩个字符串拼接成一个
扫描二维码关注公众号,回复:
2589550 查看本文章
函数原型:char* strcat(char * destination,const char * source)
注意事项:
- 源字符串必须以‘\0’结束
- 目标空间必须足够大
- 目标空间必须可修改
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest);
assert(src);
while (*dest)
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
4.strcmp()字符串比较函数,第一个字符串比第二个大,返回1,相当返回0,第一个比第二个小返回-1;
int my_strcmp(const char* str1,const char* str2)
{
int ret = 0;
while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2)&& *str2)
{
++str1;
++str2;
}
if (ret < 0)
ret = -1;
if (ret > 0)
ret = 1;
return (ret);
}
5.模拟实现strstr(),字符串查找函数,在str1中找子串str2
char* my_strstr(const char* str1, const char* str2)
{
assert(str1);
assert(str2);
char *cp = (char*)str1;
char *substr = (char*)str2;
char *s1 = NULL;
if (*str2 == '\0')
return NULL;
while (*cp)
{
s1 = cp;
substr = str2;
while (*s1 && *substr && (*s1 == *substr))
{
s1++;
substr++;
}
if (*surstr == '\0')
return cp;
cp++;
}
}