c语言函数实现strstr,C语言实现strstr函数模拟
本文汇总了全网各路大佬的经验(其实没几篇),努力打造最强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函数模拟相关推荐
- strstr函数实现(C语言)
strstr函数实现(C语言) second60 20180601 strstr 用来字符串查找子串. 顺便说一下, 字符串操作函数是C语言中非常重要的函数,里面包括了指针的精华,同时对学习数据结构 ...
- 用 C 语言开发一门编程语言 — 基于 Lambda 表达式的函数设计
目录 文章目录 目录 前文列表 函数 Lambda 表达式 函数设计 函数的存储 实现 Lambda 函数 函数的运行环境 函数调用 可变长的函数参数 源代码 前文列表 <用 C 语言开发一门编 ...
- C语言semaphore头文件,C语言再学习 -- 常用头文件和函数
Linux常用头文件如下: POSIX标准定义的头文件 < dirent.h> 目录项 < fcntl.h> 文件控制 < fnmatch. ...
- C++语言篇 第六章 字符数组及函数(不能用在string字符串中)
字符数组 数组中的每个元素都是一个字符的数组称为"字符数组".有时,把一维字符数组又称为"字符串".定义字符数组的方法与定义其他类型数组的方法类似. 对于字符数 ...
- c语言程序函数的结构,C语言课件:第11讲函数与程序结构
<C语言课件:第11讲函数与程序结构>由会员分享,可在线阅读,更多相关<C语言课件:第11讲函数与程序结构(21页珍藏版)>请在人人文库网上搜索. 1.第11讲 函数与程序结构 ...
- c语言中常用函数头文件,c语言中常用的函数和头文件
头文件ctype.h 函数列表 函数类别函数目的详细说明 字符测试为字符和数字的isalnum 是否为isalpha字符 是否控制字符iscntrl 是否为数字isdigit 是否能够显示文字(空格除 ...
- C语言基础之11:字符串和字符串函数
Tips1: 函数:gets().gets_s().fgets().puts().fputs().strcat().strncat(). strcmp().strncmp().strcpy().str ...
- python中函数包括标准库函数吗_Python语言和标准库(第二章:函数)
a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始, ...
- R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战
R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战 目录 R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战
- R语言ggplot2可视化散点图、并使用geom_encircle函数自定义多边形圈定可视化图像中的指定区域、使用geom_smooth函数基于loess方法拟合数据点之间的趋势关系曲线
R语言ggplot2可视化散点图.并使用geom_encircle函数自定义多边形圈定可视化图像中的指定区域(Scatterplot With Encircling).使用geom_smooth函数基 ...
最新文章
- Nginx if 条件判断
- 开机报警disk boot sector is to be modified
- jzoj3509-倒霉的小C【gcd,欧拉函数】
- 在Java 8中使用Stream API解析文件
- 好奇心、求知欲、理解力一直是我生命里最强大的驱动力​
- android消息队列模型,Android 消息队列机制
- adpater里写toast_Android开发UI之Toast的使用
- 微信支付JSAPI掉不起来支付按钮是什么原因?(原创)
- 在Ubuntu 20.04(含Xubuntu、Linux Mint Cinnamon等衍生版)上安装Wine QQ,获得更佳的使用体验
- Python统计字符串中的中英文字符、数字空格,特殊字符 , 空格的个数
- php pcre回溯攻击,PHP利用PCRE回溯次数限制绕过某些安全限制
- 替换修改windows xp字体,为windows 7微软雅黑
- Linux的主机名基础
- accept搭配用法_accept for的用法与搭配
- csapp家庭作业第十章
- 不要盲目跟风,看微信营销适合哪些行业
- format函数用法详解
- fastTEXT入门自然语言处理NLP
- 产品:《人人都是产品经理》读书笔记
- GDAL之OGR入门
热门文章
- 在idea上配置hadoop开发环境,使用maven配置hadoop的依赖,自动管理相关jar包
- 使用母版頁是內容如何使用CSS和javascript
- php td生成excel 斜杠表头_邮件合并功能都不掌握,还怎么成为Excel达人?
- python中用来回溯异常的模块_Python_10-异常处理
- 转载——Regression Tree 回归树
- leetcode - 764. 最大加号标志
- 去哪儿-11-city-components
- 基于狄利克雷-多项式分布做文档聚类代码(dirichlet multinomial mixture model)
- 多元正态分布的后验采样(包含程序)
- Opencv---remap函数的实现