【C】库函数之strstr

Locate substring

const char * strstr ( const char * str1, const char * str2 );

  Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1.The matching process does not include the terminating null-characters, but it stops there.

  上述内容是C++官网对strstr函数的介绍,可以看出strstr函数返回指向str1中str2第一次出现的指针,如果str2不是str1的一部分,则返回空指针。需要注意的是,匹配过程中不包含NULL空字符

  接下来给出实现strstr函数的源代码:

#define _CRT_SECURE_NO_WARNINGS 1

/*
* Copyright (c) 2018, code farmer from sust
* All rights reserved.
*
* 文件名称:MyStrstr.c
* 功能:在源字符串中查找子字符串
*       例如,"abbbbcd"中查找"bbc"
*
* 当前版本:V1.0
* 作者:sustzc
* 完成日期:2018年4月22日10:30:25
*/

# include <stdio.h>
# include <assert.h>

/*
*	函数名称:MyStrstr
*
*	函数功能:在源字符串中查找子字符串,
*			若查找成功则返回源字符串的地址,反之则返回NULL
*
*	入口参数:src, substr
*
*	出口参数:NULL or (char *) src
*
*	返回类型:char *
*/

char * MyStrstr(const char * src, const char * substr)
{
	const char * str1 = src;
	const char * str2 = substr;

	assert((NULL != src) && (NULL != substr));

	if ('\0' == *str2)
	{
		return (char *)src;
	}
	else
	{
		while ('\0' != *src)
		{
			str1 = src;
			str2 = substr;

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

			if ('\0' == *str2)
			{
				return (char *)src;
			}
			else
			{
				src++;
			}
		}
	}

	return NULL;
}

int main(void)
{
	char * str = "abbbcde";
	char * substr = "bbcd";
	char * ret = MyStrstr(str, substr);

	printf("str: %s\n", str);
	printf("substr: %s\n", substr);

	if (NULL != ret)
	{
		printf("找到了子字符串,其在源字符串中的内容为: %s\n", ret);
	}
	else
	{
		printf("没找到子字符串!\n");
	}

	return 0;
}

输出结果


猜你喜欢

转载自blog.csdn.net/sustzc/article/details/80178459