#include <stdio.h>
#include <stdlib.h>           //malloc()函数
typedef unsigned int size_t;size_t my_strlen(const char * str)
{const char *sc = NULL;if(str == NULL)return 0;for(sc = str;*sc != '\0';sc++){/*  do nothing */}               return sc - str;
}/*  因为类型可以为任意,所以形参应为void **  相等则返回0,否则不为0*/
int my_memcmp(const void *s1,const void *s2,size_t count)
{int res = 0;const unsigned char *p1 =(const unsigned char *)s1;//注意是unsigned char *const unsigned char *p2 =(const unsigned char *)s2;  for(p1 ,p2;count > 0;p1++,p2++,count--)if((res =*p1 - *p2) != 0)   //不相当则结束比较break;return res;
}
/* 查找字符串s2是否为s1的子串,s1为主串* 如果是则返回从第一个子串开始的字符串 */
char * my_strstr(const char *s1,const char *s2)
{int len1,len2;len2 = my_strlen(s2);   //获取子串s2的长度if(!len2)                //如果子串s2为空则返回s1return (char *)s1;   //先强制类型转换len1 = my_strlen(s1); //获取子串s1的长度while(len1 >= len2){len1--;if(!my_memcmp(s1,s2,len2)) //my_memcmp返回0表示s1中存在s2的子串return (char *)s1;      //先强制类型转换s1++;}return NULL;    //len1 < len2时返回空
}int main()
{printf("%s\n",my_strstr("hello world","world"));printf("%s\n",my_strstr("hello world","e"));printf("%s\n",my_strstr("hello world","llo"));return 0;
}

执行结果:

2013年10月10日17:23分补充下面算法

不使用库函数来实现strstr函数,效率其实也不高,高效率应该使用KMP法

#include <stdio.h>char* strstr(char* buf, char* sub)
{char* bp;char* sp;if(sub == NULL)return  buf;while(buf !=NULL){bp=buf;sp=sub;do{ if(!*sp)     //sp到最后即sub到最后则返回第一个子串在主串的位置return buf;}while(*bp++ == *sp++);buf++;                //如果不等,主串buf+1,子串回溯到0}return 0;
}int main()
{printf("%s\n",strstr("hello world", "ell"));return 0;
}

执行结果:

转载于:https://www.cnblogs.com/suncoolcat/p/3362333.html

strstr和memcmp函数的实现相关推荐

  1. 使用memcmp函数判断两个函数的前n位字节数是否相等

    memcmp函数的介绍 头文件:#include <string.h> 定义函数:int memcmp (const void *s1, const void *s2, size_t n) ...

  2. strstr(str1,str2) 函数

    可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 "string.h"中.对于处理字符串的 ...

  3. strstr(str1,str2)函数使用时注意事项

    可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2) 函数是字符串处理函数之一,位于头文件 "string.h"中.对于处理字符串的 ...

  4. Strstr和Strchr函数详解

    Strstr函数详解 Strstr函数原型 char *strstr( const char *string, const char *strCharSet ); Strstr函数功能 在一个字符串中 ...

  5. c语言memcmp和java的_C语言memcmp()函数:比较m字节长的两个字符串s1和s2

    函数名:memcmp 头文件: 函数原型: void* memcmp(void *s1,void *s2,unsigned m); 功能:比较m字节长的两个字符串s1和s2 参数: s1 和 s2 为 ...

  6. C语言学习笔记---字符串查找函数strstr()和strpbrk()函数

    strstr()函数   C语言中如何向查找一个字符串中是否包含另一个字符串,可以使用strstr()函数.使用示例如下: int main(int argc, char *argv[]) {char ...

  7. strstr()函数的使用说明(C语言)

    头文件 <string.h> 函数作用: 1.strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 2.找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址: 3.如果未 ...

  8. C语言字符串函数(3)strstr,strtok函数的详解

    上一期,我讲解了关于字符串函数中,受限制的字符串函数,有想了解的小伙伴们可以点此链接去看看:C语言字符串函数(2)受限制的字符串函数 那么今天,我来讲一讲标题中这两个函数的作用和使用方法. 目录 一. ...

  9. 【C】模拟实现strlen,strcpy,strcat,strcmp,strncpy,syrcat,strnact,strncmp,strstr等字符串函数

    目录 字符串函数模拟实现 1.strlen模拟实现 2.strcpy模拟实现 3.strncpy模拟实现 4.strcat模拟实现 5.strncat模拟实现 6.strcmp模拟实现 7.strnc ...

最新文章

  1. 2020 年 5 大 DevOps 趋势
  2. swagger导出excel文档_将Swagger2文档导出为HTML或markdown等格式离线阅读
  3. 【Linux】一步一步学Linux——tar命令(62)
  4. CodeForces - 830C Bamboo Partition(数学+推公式)
  5. 转圈游戏(luogu 1965)
  6. android手机用户,[信息图]Android手机用户如何使用自己的设备?
  7. C#.NET软件项目中程序开发外包经验分享【从接包者转变为发包者】
  8. 在python中分析药品销售数据
  9. pth转onnx:RuntimeError: Exporting the operator uniform to ONNX opset version 9 is not supported.
  10. 假定我们要建立一个学术论文数据库,存储如下信息: •学术期刊有期刊编号、期刊名、发行单位; •作者有作者编号、作者姓名、电子邮件; •论文有论文编号、论文标题、摘要、正文; •每篇论文只被一个
  11. 存储型路由器和SAN路由器
  12. 梳理审批流程的程序编码流程
  13. 圆形谷仓Circular Barn_Silver---(DP优化 / )队列 + 贪心(复杂度O(2n))---DD(XYX)​​​​​​​的博客
  14. ionic自定义图标(ion-icon)
  15. MSSQL Server 2008 - express 版 安装 企业管理器Management Studio
  16. 学习笔记 计算机组成原理_名词解释
  17. 安装报错:TypeError: _classify_installed_files() got an unexpected keyword argument ‘cmake_install_dir‘
  18. 计算机什么专业可以自学考试,自学考试,计算机专业哪个专业好?
  19. Active Form显示标题栏及页面跳转
  20. OSError: [WinError 127] 找不到指定的程序。

热门文章

  1. em算法怎么对应原有分类_[PRML]序列数据 HMM维特比算法及扩展
  2. 使用多线程会加快文件读取速度吗?
  3. MySQL探秘(五):InnoDB锁的类型和状态查询
  4. win环境下安装python之matplotlib经历
  5. c++primer练习13.42
  6. Pygame中rect 初探
  7. Ubuntu 必装软件及安装教程
  8. 怎样进入服务器修改东西,进入服务器修改数据库
  9. Leetcode题库 598.N叉树的前序遍历(递归迭代 C实现)
  10. [BUUCTF-pwn]——starctf_2019_babyshell