全国咨询/投诉热线:400-618-9090

首页技术文章正文

常用的9个字符串C标准库函数之strstr实现

更新时间:2017-11-14 来源:黑马程序员 浏览量:

之前介绍了经常用到的9个字符串C标准库函数,这次我们来介绍一下strstr字符串函数的实现。

函数原型:

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

参数:

str1:需要从其中查找子串的字符串

str2:所要查找的子串

返回:

如果从str1中查找到了str2,则返回str1中第一次出现str2的位置,否则返回NULL.

下面我们来测试一下strstr函数的功能:

//测试程序

#include

#include //strstr

int main()

{

char str[] = "itcastithemia";

char substr[] = "th";//所要查找的子串

char *p = strstr(str, substr);

if (p != NULL)

printf("%s\n", p);

else

printf("not found %s\n", substr);

p = strstr(str, "tha");

if (p != NULL)

printf("%s\n", p);

else

printf("not found %s\n", substr);

return 0;

}

根据我们上面对strstr功能的介绍,第一次查找子串”th”,会查找成功,所以strstr函数会返回th首次出现的地址,而第二次要查找的子串“tha”并没i用,所以strstr函数会返回NULL.

测试结果如图:

1510647567672_20171114135104673.jpg

符合我们的预期。

下面自己实现一个strstr函数,思路如下:

1) 从str1的每一个位置开始,依次和str2中的每一个字符进行比较,如果在到str2字符串结尾之前,出现了不等的情况,则结果本轮比较,继续进行下一轮比较,否则查找子串str2成成,返回str1中本轮开始对比的位置。

程序如下:

char *mystrstr(const char *str1, const char *str2)

{

const char *pstr = str1;

const char *psub = str2;

const char *pcur = NULL;

if (str1 == NULL || str2 == NULL) //判断参数是否合法

{

return NULL;

}

while (*pstr != '\0')

{

pcur = pstr; //记录每一次从str1中对比字符的起始位置

psub = str2;

while (*psub != '\0') //从pcur所标示的位置开始依次与psub中的每一个字符进行比较

{

if (*pcur != *psub) //如果出现字符不相等,则结束本次循环指针移动到下一个位置

break;

pcur++;

psub++;

}

if (*psub == '\0') //如果到达子串结尾,则说明查找子串成功

return pstr;

pstr++; //pstr指向str1中的下一个字符串位置

}

return NULL;

}

使用自实现的mystrstr运行上面的测试程序,结果如下:友情提示:获得更多学科学习视频+资料+源码,请加QQ:3276250747。


1510647577953_20171114135123611.jpg

至此,我们成功自实现了一个strstr函数。


本文版权归黑马程序员C/C++学院所有,欢迎转载,转载请注明作者出处。谢谢!


作者:黑马程序员C/C++培训学院


首发:http://c.itheima.com/


javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名