strstr函数及模拟
![](/assets/blank.gif)
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串,是字符串处理函数之一,位于头文件 string.h中。
1.strstr函数的参数以及参数
两个参数分别是,要扫描的 C 字符串的首地址,和包含要匹配的字符序列的 C 字符串的首地址。。
返回值:指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。
tips:匹配过程不包括终止空字符,但它到此为止。
2.VS库函数的实现
![](/assets/blank.gif)
char * __cdecl strstr (const char * str1,const char * str2)
{char *cp = (char *) str1;char *s1, *s2;if ( !*str2 )return((char *)str1);while (*cp){s1 = cp;s2 = (char *) str2;while ( *s2 && !(*s1-*s2) )//逐个对比,不同则跳出s1++, s2++;if (!*s2)return(cp);cp++;}return(NULL);
3.模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_ss(const char*s1, const char*s2)
{assert(s1&&s2);int t = strlen(s2);//const char * p = s1;s1存放的是一个地址把是s1赋值给变量p等价于指向相同元素的指针while (*s1){int i = 0,j=0;for (i = 0; *(s1+i)==*(s2+i); i++){j++;}if (j == t){return (char*)s1;}s1++;}return NULL;
}
int main()
{char str1[20] = "mydarling";char str2[10] = "arli";char* ret = my_ss(str1, str2);if (ret != NULL){printf("找到了 在这开始%s",ret);}elseprintf("找不到");
}
4.KMP算法。
通常的字符串匹配算法流程如下:
从主串(目标字符串)和模式串(待匹配字符串)的第一个字符开始比较,如果相等则继续匹配下一个字符, 如果不相等则从主串的下一个字符开始匹配,直到模式串被匹配完,则匹配成功,或主串被匹配完且模式串未匹配完,则匹配失败。
而相对于以上的暴力匹配,KMP算法的改进之处在于:能够知道在匹配失败后,有多少字符是不需要进行匹配可以直接跳过的,匹配失败后,下一次匹配从什么地方开始,能够有效的减少不必要的匹配过程。其中跳过多少个字符是需要我们进行next数组的生成。
4.1两者时间复杂度的比较
我们假定n为文本串长度,m为模式串长度,因为在匹配的过程中,根据前缀表不断调整匹配的位置,可以看出匹配的过程是O(n),之前还要单独生成next数组,时间复杂度是O(m)。、
所以整个KMP算法的时间复杂度是O(n+m)
而暴力匹配的时间复杂度是O(n × m),所以KMP算法在匹配字符串中极大的提高的搜索的效率。
strstr函数及模拟相关推荐
- C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()
C语言函数: 字符串函数及模拟实现strtok().strstr().strerror() strstr()函数: 作用:字符串查找.在一串字符串中,查找另一串字符串是否存在. 形参: str2在st ...
- 字符串函数剖析(3)---strstr函数
1.strstr函数的巧妙 – 查找子字符串 1.1模拟实现strstr函数 strstr函数:在一个字符串中查找子串 学习新函数时,先去c库查找该函数的相关资料,更加助于你的学习 const cha ...
- strstr函数的原理原来是这样的
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.strstr函数是什么? 二.strstr函数的参数及实现原理 1.参数 2.strstr函数的模拟使用 总结 前 ...
- 【C语言】 strstr查找子字符串函数以及模拟实现讲解
strstr 字符串查找函数 返回的是相同子串的第一个出现的的地址 返回类型是 char* 返回的是相同子串的第一个出现的的地址 参数是 const char* str1 ,const cha ...
- C语言 strstr函数的用法及模拟实现strstr函数
C语言 strstr函数的用法及模拟实现strstr函数 一.strstr函数的用法 二.模拟实现strstr函数的功能 一.strstr函数的用法 1.strstr函数原型:char* strstr ...
- 【C】字符串库函数及重点函数的模拟实现(下)—— strstr | strtok | strerror
本文重点 8.strstr 9.strtok 10.strerror 本文将继续介绍字符串库函数,即重点函数的模拟实现. 8.strstr
- strstr函数和strtok函数的使用
目录: strstr函数的使用 模拟实现strstr函数 strtok函数的使用 strstr函数定义:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该 ...
- C语言——字符串+内存函数及其模拟实现
目录 0. 思维导图 1. 前言 2. 函数介绍 2.1 strlen 2.2 strcpy 2.3 strcat 2.4 strcmp 2.5 strncpy 2.6 strncat 2.7 str ...
- 【C语言详解】——常见字符和字符串函数及其模拟实现
本文主要介绍一些常见的字符和字符串函数及其模拟实现 所需要的头文件 #include<string.h> 目录 1.求字符串长度 strlen 1.1模拟实现 strlen(三种方法) 2 ...
最新文章
- 试用最新版本的live writer发一篇日志看看
- JSONP实现Ajax跨域请求
- MFC程序在控制台输出的实现
- 关于网页制作的规划与流程图的使用
- VTK:可视化之HanoiIntermediate
- 软件定义存储的定制化怎么走?
- 我就改了一行代码,为什么就全超时了?
- linux 中 id指令,Linux id 命令
- 前端学习(3247):react的生命周期getSnapBeforeUpdate举例
- http 错误 404.0 - not found_电脑Regsvr32 用法和错误消息的说明
- 数字安全控制系统行业调研报告 - 市场现状分析与发展前景预测
- 直接拿来用!Visual Studio 扩展工具利用 AI 强化你的代码
- 使用depot_tools下载chromium源码
- My97datepicker时间控件的简单使用
- DICOM世界观·第二章:[2]像素操作
- 前端图片上传问题整理
- Texture tiling
- 图片信息查看软件 ExifTool GUI
- #define的定义用法
- excel与access结合运用_当excel不够用时,如何利用Access进行数据分析?