字符串相关函数的实现

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++;
	}
}

猜你喜欢

转载自blog.csdn.net/audience_fzn/article/details/81394788