str系列字符串函数

int strlen(const char *str)--->求字符串长度的函数
char *strcpy(char *dest,char *src)--->字符串拷贝
char *strcat(char *dest,char *src)--->字符串连接
char *strstr(const char *str1,const char *str2)--->字符串的查找(查找子串)
char *strcmp(char *str1,char *str2)--->字符串比较
void *memcpy(void *dest, const void *src, int count)--->内存拷贝
void *memmove(void *dest,const void *src,int count)--->内存移动

strlen:

int my_strlen(const char *str)//计数器方式
{
	int count = 0;

	assert(str);

	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int my_strlen(const char *str)//递归方式
{
	assert(str);

	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);
}

int my_strlen(char *str)//指针-指针 :表示两者相差的元素个数
{
	const char *start = str;
	while (*str != '\0')
	{
		str++;
	}
	return str - start;
}
int main()
{
	system("pause");
	return 0;
}

strcpy:

char *strcpy(char *dest, const  char *src)
{
	assert(dest != NULL);
	assert(src != NULL);
	char *ret = dest;
	while (*dest++ = *src++)
		//先进行了复制再进行了++,当赋值到终结符‘\0’时,不符合while的判断条件,退出循环  
		//而此时已经将所有的内容复复制到字符数组中了  
	{
		;
	}
	return ret;
}

strcat:

char *strcat(char *dest, const char *src)
{
	assert(dest && src != NULL);
	char *ret = dest;
	while(*dest != '\0')//先找到目标字符串的'\0'
	{
		dest++;
	}
	while (*dest++ = *src++)//先复制,再++。当复制遇到'\0'时,不符合while的判断条件,退出循环。此时,已将所有的内容复制到目标字符串数组中了
	{
		;
	}
	return ret;
}
strstr:
char *strstr(const char *str, const char *substr)
{
	assert(str && substr);
	const char *s1 = str;//创建两个临时变量
	const char *s2 = substr;
	if (*s2 == '\0')//如果子串为空,那么久直接返回str
	{
		return (char *)s1;
	}
	while (*str != '\0')//如果被查找的字符串不为空
	{
		s1 = str;
		s2 = substr;
		while (*s1 != '\0' && * s2 != '\0' && *s1 == *s2)//如果被查找的字符串和子串不为空并且两个一直相等的话...
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')//当子串遇到'\0',表示查找结束
		{
			return str;//返回被查找的子串
		}
		str++;
	}
	return NULL;//如果被查找的字符串为空的话,直接返回空
}

strcmp:

char *strcmp(const char *str1, const char *str2)//...
{
	int ret = 0;
	while (!(ret = *(unsigned char *)str1 - *(unsigned char *)str2) && *str1)
	{
		++str1;
		++str2;
	}
	if (ret < 0)
		return -1;
	else if (ret > 0)
		return 1;
	return ret;
}



猜你喜欢

转载自blog.csdn.net/weixin_40123831/article/details/80359020
今日推荐