C语言 strstr函数的用法及模拟实现strstr函数

  • 一、strstr函数的用法
    • 二、模拟实现strstr函数的功能

一、strstr函数的用法

1.strstr函数原型:char* strstr(const char* str1,const char* str2)
2.功能:strstr()是一个参数为两个字符指针类型,返回值是char*类型的函数,它用于找到子串(str2)在一个字符串(str1)中第一次出现的位置。这里因为传进来的地址指向的内容不会在发生改变,所以我们在两个形参(char*)前加上const.
3.包含在string.h头文件中
4.代码实践

#include <stdio.h>
#include<string.h>int main()
{const char* p1 = "abcdefgh";//"abcdefgh"是常属性字符串,里面的内容无法被改变,在char*前加constconst char* p2 = "def";char* ret = strstr(p1, p2);//把返回的字符串首地址赋给retif (ret == NULL){printf("子串不存在\n");//当返回的字符串首地址为空,ret为一个空指针,代表不存在该子串}else{printf("%s\n", ret);//当返回的字符串首地址不为空,则会从字符串首地址开始打印,到‘\0’停止}return 0;
}

结果:

二、模拟实现strstr函数的功能

1.代码实现

#include <stdio.h>
#include <assert.h>
#include<string.h>
char* my_strstr(const char* p1, const char*p2)//参照strstr函数原型构建自己的strstr函数
{assert(p1 != NULL);//断言该指针不为空指针assert(p2 != NULL);char*s1 = NULL;//创建一个空指针;char*s2 = NULL;char*cur = p1;if (*p2 == '\0'){return (char*)p1;                    //如果我们所要找的子串p2为'\0',返回总串的首元素地址}while (*cur)//cur代表指向的是子串第一次出现的首元素地址{s1 = cur;                      //把cur指向字符串的首元素地址赋给s1s2 = (char*)p2;                    //把p2指向的首元素地址赋给s2,每一次循环都要从p2的首元素地址开始重新比较while ((*s1 != 0) && (*s2 != 0) && *s1 == *s2)           //只有在s1指向的首元素地址,s2指向的首元素地址都不为'\0'的时候,才可以在总串中找子串的首地址第一次出现的时候{                                            // 比较s1,s2指向的地址所对应的字符是否相等,若相等,各自指向的地址向后跳一个字节比较下一位是否相等在满足以上的条件下不断循环,若不满足,s1++;                                    //开始一下比较s2++;}if (*s2 == '\0')             //若经过上面的比较,s2指向的内容恰好是'\0',代表找到子串首次出现的地址{                              //若不满足以上情况的比较,开始以下比较return (char*)cur;}if (*s1 == '\0')  {return NULL;            //若在s2指向的内容不为'\0'时,s1指向的内容率先为0,代表总串长度比子串长度短,必不存在子串,返回一个空指针}cur++;//代表当前cur指向的并不是子串第一次出现的首元素地址,指向的地址要往后跳一个字节}return NULL;//如果经过以上比较都不能得出结果,代表找不到子串,要返回空指针}int main()
{const char* arr1 = "abbbcdefg";const char* arr2 = "bbc";char* ret = my_strstr(arr1, arr2);if (ret == NULL){printf("子串不存在\n");}else{printf("找到了 子串为:%s\n", ret);}return 0;
}

结果·:

C语言 strstr函数的用法及模拟实现strstr函数相关推荐

  1. strlen函数的用法及模拟实现strlen函数的两种方法

    strlen函数的用法及模拟实现strlen函数的两种方法 一.strlen函数的用法 strlen的简单应用 二.指针模拟实现strlen函数 三.递归模拟实现strlen函数 一.strlen函数 ...

  2. c语言qsort函数的用法与模拟实现

    一.qsort函数说明 首先他是一个库函数,在使用时需要包含stdlib.h这个头文件,其次他是一个基于快速排序算法的排序函数,任何类型的数据都可以实现排序,比如字符串排序,结构体排序及整形排序. 二 ...

  3. c语言getsum函数的用法,只会用“Sum函数”求和的你,请花1分钟学会Sum if函数!...

    原标题:只会用"Sum函数"求和的你,请花1分钟学会Sum if函数! 60秒get一个HR实用小技巧 说到求和函数,你先想到的是什么? 如果你脱口而出的是"Sum函数& ...

  4. c语言函数time用法,c语言中time函数详解

    总结: time_t time(time_t *timer); 返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到此刻的本地时间所经过的秒数,time_t实际是个long长整型 ...

  5. python中int函数的用法浅析_Python中int()函数的用法浅析

    int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int) Help on class int in module __builtin__ ...

  6. hog函数的用法 python_Python常见内置函数用法(三)

    本文作者:孙雪丽 文字编辑:周聪聪 技术总编:张学人 重大通知!!!2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,招生工作已经圆满结束.另外爬虫俱乐部将于2019年7月5日至 ...

  7. matlab fopen函数的用法,matlab中关于fread函数的用法

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:matlab中关于fread函数的用法 问题详情:用fread打开一个时,需要不需要把开放在某个特回答:必须在Matlab可以搜索的 ...

  8. python基础函数及用法意思_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

  9. python中如何查一个函数的用法_Python常见内置函数用法(三)

    本文作者:孙雪丽 文字编辑:周聪聪 技术总编:张学人重大通知!!!2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,招生工作已经圆满结束.另外爬虫俱乐部将于2019年7月5日至7 ...

最新文章

  1. 网站的 计算机主机作用是什么意思,网关是什么意思?网关的作用是什么?
  2. const和static readonly 区别
  3. 解决django配合nginx部署后admin样式丢失
  4. Windows上编译github源码方式运行Node-RED,以及离线迁移安装Node-RED
  5. 不使用第三个变量交换两个变量的值
  6. tf.parse_single_example
  7. 4加密问题漏洞修复_Apache Shiro 反序列化漏洞实战
  8. 082 typing模块
  9. (强烈推荐)无线网络密码破解方法
  10. java100道逻辑题及答案_100道Java面试题收集整理及参考答案
  11. Tomcat 开启远程监控(JMX)
  12. c语言互质欧拉函数,互质与欧拉函数
  13. html5 视频缩略图,应用canvas获取video的缩略图
  14. 为什么计算机无法读取u盘,U盘无法被电脑识别怎么办?
  15. Android Studio Logcat 截断问题(cocos2d-x 篇)
  16. 微信图片 自动上传到服务器,微信小程序怎样使图片上传至服务器
  17. YOLO系列(V1-V2-V3)
  18. wireshark抓包分析ping数据包
  19. java计算机毕业设计医院临床管理系统录屏源程序+mysql+系统+lw文档+远程调试
  20. 计算机财务管理技术pdf,计算机财务管理技术在财务管理方面的应用研究.pdf

热门文章

  1. kds官方android客户端,电子厨打设置(KDS/ADS)
  2. 简单易学的五款英伦风格鸡尾酒PartyOK版
  3. 做人的基本原则(看完终身受益)
  4. java 实现克隆_Java中如何实现深克隆
  5. 微信看一看内容来源哪里?看一看推荐规则是什么?怎么赚钱?
  6. datagrid系列之-基本添加行,删除行,插入行,自定义方法
  7. 没有任何绘画基础的人如何自学绘画?
  8. 【visual studio】符号 SymbolCache
  9. 敏捷测试——打通开发与测试的壁垒!
  10. js 针对异步的处理