本文汇总了全网各路大佬的经验(其实没几篇),努力打造最强strstr模拟技术贴(大误)

不说废话直接看实现思路:

定义两个指针*p1,*p2指向两个字符串,开始比较;

若*p1==*p2,则p1++,p2++,两个指针同时向后移动,比较之后的字符;

若*p1!= *p2,则*p2指回str2的头,而对于*p1,要指向开始匹配到的字符的下一个字符,这样才不会漏掉str1中的字符,这就要定义一个指针(pt)用来记录开始匹配到的第一个字符的地址;

循环过程中,如果*p2='\0',则成功找到,这时返回pt就可以了;

如果*p1='\0',这种情况下说明p1剩的比p2还少,不可能找到,于是就想到当  strlen(pt)=strlen(p1)]  ,  返回NULL,这样可以避免多余的不必要的比较;

code demo(IDE:VS2017)

#include

#include

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

{

char *p1 = (char *)str1;

char *p2 = (char *)str2;

char *pt = (char *)str1;

while (strlen(pt) >= strlen(p2))

{

p1 = pt;

while ((*p1 == *p2)&&(*p2 != '\0'))

{

p1++;

p2++;

}

if (*p2 == '\0')

return pt;

p2 = str2;

pt++;

}

return NULL;

}

int main()

{

char a[100];

char b[100];

char *p = NULL;

gets(a);

gets(b);

p = my_strstr(a, b);

puts(p);

getchar();

return 0;

}

PS:这个方法用到了库,而strstr恰巧就包含在这个库里,Emmm,蛇咬住了自己的尾巴?那就再自己写个strlen函数吧哈哈哈;

网上好多人的做法都是以while(*p1)作为循环条件,这样虽然可以不用strlen函数,但多了不必要的循环次数;

这个的editor真不好用......;

祝德井大爷生日快乐( •̀ ω •́ )✧

c语言函数实现strstr,C语言实现strstr函数模拟相关推荐

  1. strstr函数实现(C语言)

    strstr函数实现(C语言) second60  20180601 strstr 用来字符串查找子串. 顺便说一下, 字符串操作函数是C语言中非常重要的函数,里面包括了指针的精华,同时对学习数据结构 ...

  2. 用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计

    目录 文章目录 目录 前文列表 函数 Lambda 表达式 函数设计 函数的存储 实现 Lambda 函数 函数的运行环境 函数调用 可变长的函数参数 源代码 前文列表 <用 C 语言开发一门编 ...

  3. C语言semaphore头文件,C语言再学习 -- 常用头文件和函数

    Linux常用头文件如下: POSIX标准定义的头文件 < dirent.h>        目录项 < fcntl.h>         文件控制 < fnmatch. ...

  4. C++语言篇 第六章 字符数组及函数(不能用在string字符串中)

    字符数组 数组中的每个元素都是一个字符的数组称为"字符数组".有时,把一维字符数组又称为"字符串".定义字符数组的方法与定义其他类型数组的方法类似. 对于字符数 ...

  5. c语言程序函数的结构,C语言课件:第11讲函数与程序结构

    <C语言课件:第11讲函数与程序结构>由会员分享,可在线阅读,更多相关<C语言课件:第11讲函数与程序结构(21页珍藏版)>请在人人文库网上搜索. 1.第11讲 函数与程序结构 ...

  6. c语言中常用函数头文件,c语言中常用的函数和头文件

    头文件ctype.h 函数列表 函数类别函数目的详细说明 字符测试为字符和数字的isalnum 是否为isalpha字符 是否控制字符iscntrl 是否为数字isdigit 是否能够显示文字(空格除 ...

  7. C语言基础之11:字符串和字符串函数

    Tips1: 函数:gets().gets_s().fgets().puts().fputs().strcat().strncat(). strcmp().strncmp().strcpy().str ...

  8. python中函数包括标准库函数吗_Python语言和标准库(第二章:函数)

    a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始, ...

  9. R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

    R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战 目录 R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战

  10. R语言ggplot2可视化散点图、并使用geom_encircle函数自定义多边形圈定可视化图像中的指定区域、使用geom_smooth函数基于loess方法拟合数据点之间的趋势关系曲线

    R语言ggplot2可视化散点图.并使用geom_encircle函数自定义多边形圈定可视化图像中的指定区域(Scatterplot With Encircling).使用geom_smooth函数基 ...

最新文章

  1. Nginx if 条件判断
  2. 开机报警disk boot sector is to be modified
  3. jzoj3509-倒霉的小C【gcd,欧拉函数】
  4. 在Java 8中使用Stream API解析文件
  5. 好奇心、求知欲、理解力一直是我生命里最强大的驱动力​
  6. android消息队列模型,Android 消息队列机制
  7. adpater里写toast_Android开发UI之Toast的使用
  8. 微信支付JSAPI掉不起来支付按钮是什么原因?(原创)
  9. 在Ubuntu 20.04(含Xubuntu、Linux Mint Cinnamon等衍生版)上安装Wine QQ,获得更佳的使用体验
  10. Python统计字符串中的中英文字符、数字空格,特殊字符 , 空格的个数
  11. php pcre回溯攻击,PHP利用PCRE回溯次数限制绕过某些安全限制
  12. 替换修改windows xp字体,为windows 7微软雅黑
  13. Linux的主机名基础
  14. accept搭配用法_accept for的用法与搭配
  15. csapp家庭作业第十章
  16. 不要盲目跟风,看微信营销适合哪些行业
  17. format函数用法详解
  18. fastTEXT入门自然语言处理NLP
  19. 产品:《人人都是产品经理》读书笔记
  20. GDAL之OGR入门

热门文章

  1. 在idea上配置hadoop开发环境,使用maven配置hadoop的依赖,自动管理相关jar包
  2. 使用母版頁是內容如何使用CSS和javascript
  3. php td生成excel 斜杠表头_邮件合并功能都不掌握,还怎么成为Excel达人?
  4. python中用来回溯异常的模块_Python_10-异常处理
  5. 转载——Regression Tree 回归树
  6. leetcode - 764. 最大加号标志
  7. 去哪儿-11-city-components
  8. 基于狄利克雷-多项式分布做文档聚类代码(dirichlet multinomial mixture model)
  9. 多元正态分布的后验采样(包含程序)
  10. Opencv---remap函数的实现