C语言字符串查找函数的解析及其实现

1.strchr:返回一个字符第一次出现在该字符串中的地址

函数声明:char * strchr ( const char *, int );

char* My_strchr(const char *dest, const char src)
{
	assert(dest != NULL);

	while (*dest != '\0')
	{
		if (*dest == src)
		{
			return (char*)dest;
		}
		dest++;
	}
	return NULL;
}
2.strrchr:返回一个字符最后一次出现在该字符串中的地址
函数声明:char * strrchr ( const char *, int );
char* My_strrchr(const char*dest, char src)
{
	assert(dest);

	char *start = NULL;

	while (*dest != '\0')
	{
		if (*dest == src)
		{
			start = (char*)dest;
		}
		dest++;
	}

	return start;
}

3.strpbrk:返回第一个字符串中第一个出现在第二个字符串中的字符的地址

函数声明:char * strpbrk ( const char *, const char * );

char* My_strpbrk(const char *dest, const char *src)
{
	assert(dest && src);

	char *start = (char*)src;

	while (*dest != '\0')
	{
		src = start;

		while (*src != '\0')
		{
			if (*dest == *src)
			{
				return (char*)dest;
			}
			src++;
		}
		dest++;
	}
	return NULL;
}

4.strspn:返回str1字符串中开始部分匹配str2字符串中字符的个数

函数声明:size_t strspn ( const char *str1,const char *str2);

int My_strspn(const char *str1, const char *str2)
{
	assert(str1 && str2);

	int count = 0;
	const char *start = str2;

	while (*str1)
	{
		str2 = start;

		while ((*str1 != *str2) && *str2)
		{
			str2++;
		}
		
		if (*str2 == '\0')
		{
			return count;
		}

		count++;
		str1++;
	}

	return count;
}

5.strcspn:返回str1指向字符串中开始部分出现的不在str2指向的字符串中的字符的个数

函数声明:size_t strcspn ( const char * str1, const char * str2 );
 

int My_strcspn(const char *str1, const char *str2)
{
	assert(str1 && str2);

	int count = 0;
	const char *start = str2;

	while (*str1)
	{
		str2 = start;

		while ((*str1 != *str2) && *str2)
		{
			str2++;
		}

		if (*str1 == *str2)
		{
			return count;
		}

		count++;
		str1++;
	}

	return count;
}

 

你可能感兴趣的:(C语言字符串查找函数的解析及其实现)