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

c/c++培训之常用的9个字符串C标准库函数之strstr实现

更新时间:2016年08月01日09时40分 来源:传智播客C/C++学科 浏览次数:

传智播客C/C++培训专家:常用的9个字符串C标准库函数之strstr实现
之前介绍了经常用到的9个字符串C标准库函数,这次我们来介绍一下strstr字符串函数的实现。
函数原型:
char * strstr ( const char * str1, const char * str2 );
参数:
str1:需要从其中查找子串的字符串
str2:所要查找的子串
返回:
如果从str1中查找到了str2,则返回str1中第一次出现str2的位置,否则返回NULL.
 
下面我们来测试一下strstr函数的功能:
//测试程序
#include <stdlib.h>
#include <string.h> //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.
测试结果如图:
 
符合我们的预期。
下面自己实现一个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运行上面的测试程序,结果如下:
 
至此,我们成功自实现了一个strstr函数。

 本文版权归传智播客C++培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客C/C++培训学院
首发:http://www.itcast.cn/c/ 
 

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额