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; }
输出结果