当前位置:网站首页>模拟实现库函数strstr--查找子字符串
模拟实现库函数strstr--查找子字符串
2022-07-19 20:39:00 【别时须清欢】
一.对库函数strstr的了解
通过在MSDN或者cplusplus网站上检索strstr
通过对strstr的检索,可以初步了解到strstr以下信息:
1.返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回空指针
2.匹配过程不包括终止空字符,但它止步于此(str1比str2长度短时,str1如果提前遇到了\0会提前停止比较)
二.模拟实现库函数strstr
思路分析:
1.在str1目标字符串中寻找到和str2源头字符串中首个字符相等的位置,并从该处向后依次比较和str2中的字符串是否一致
2.在str1目标字符串中找到了和str2源头字符串中首个字符相等的位置向后比较发现不像等后,跳出比较,寻找下一个str1源头字符串中和str1首个字符相等的位置,并从该处继续向后依次比较
3.重复上述操作,直至找到子字符串返回str1中该处相等的第一个字符的位置,或比较完后仍未在str1中找到子字符串str2,返回空指针
代码如下:
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* st1 = str1;//操作st1和st2,防止直接操作str1和str2导致被更改
const char* st2 = str2;
const char* p = str1;//记录str1得地址,操作str1中得字符
//查找得范围应该再str1得字符串以内
while (*p)
{
st1 = p; //若第一次未找到子串,st1指向首个相等字符后的下一个位置
st2 = str2;
//寻找到str1中和str2中首个字符相等相等的位置
while (*st1 == *st2 && *st1 != '\0' && *st2 != '\0')
{
st1++;
st2++;
}
//找到str1中和str2首次字符相等的位置并且比较完全相同以后即找到了子字符串内容
if (*st2 == '\0')
{
return p;//返回此时找到的str1中和str2字符中相同的第一个字符的地址
}
p++; //如果前面找到的第一个相同的字符开始,到后面都没有找到和str2内容一致的字符
//则再str1中找下一个和str2中内容相等的第一个字符的位置在比较
}
//当*p遍历完以后,都为返回P的地址,表明找不到
return NULL;
}
int main()
{
char arr1[] = "C programed";
char arr2[] = "grame";
char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
{
printf("字串不存在:%s\n",ret);
}
else
printf("字串存在,并且为:%s\n", ret);
return 0;
}
三.对库函数strstr返回值的说明
通过前面对库函数strstr的了解,直到它是用来查找某一字符串中是否有另一字符串的字串。容易让人误解的是,strstr找到子串以后,返回的并不止str1中子串的内容,而是连同子串后面的内容一同返回。**
对于上面的代码,调试后观察内存可以看到:
返回的字符串的地址中的内容是gramed\0
运行结果如下:
边栏推荐
- PMP每日一练 | 考试不迷路-7.19
- The application could not be installed: INSTALL_FAILED_USER_RESTRICTED
- 赴港上市告吹后,土巴兔终止创业板IPO,创始人作出回应
- 2022 Henan Mengxin League game (2): Henan University of technology C - Zhanlong
- JDBC quick start
- Has baozi ever played in the multi merchant system?
- Is it safe for Dongguan securities to buy shares and open an account?
- July 18, 2022, village of p6722 "mcoi-01" in Luogu
- English语法_物主代词
- y71.第四章 Prometheus大厂监控体系及实战 -- prometheus server安装(二)
猜你喜欢
DeFi 2.0的LaaS协议Elephant,或许是你熊市下为数不多的获利手段
Microblogging system based on BS architecture
对RPC的简单理解
泡泡玛特7天市值蒸发210亿港元,国内卖不动,出海前途未卜
Notez les titres des 13es championnats provinciaux intégrés de la coupe Blue Bridge
请问Redis 如何实现库存扣减操作和防止被超卖?
可以DIY装修的商城系统,你也能拥有!
Simple examples of pointer arrays and array pointers
FFmpeg 视频解码
JSON format interface test process
随机推荐
STM32 porting RT thread nano to realize full steps of fish
迅为STM32MP157开发板安装VMware Tool工具
English sentence pattern reference exclusive Edition - subject clause - predicative clause
Ffmpeg audio and video capture
The LAAS protocol of defi 2.0 is the key to revitalizing the development of defi track
解析高质量STEAM教育中的探究
Jincang database kingbasees SQL language reference manual (3.3. type conversion table, 3.4. constants)
2022河南萌新联赛第(二)场:河南理工大学 G - 无限
2022 Henan Mengxin League game 2: Henan University of technology J - sign in
JSON format interface test process
谈谈指针!
2022.07.18 洛谷 P6722 「MCOI-01」Village 村庄
SQL optimization related
Dynamic memory related notes
串的部分基本操作代码实现
VS2017 30天试用结束后无法使用,登录界面卡主问题
Hbuilderx eslint configuration
在信息技术下的创客教育新型研究
English grammar_ Possessive pronoun
Essays of this week (sorted out on weekends)