当前位置:主页 > c/c++教程 > C++ strstr函数

C++中strstr函数的实现方法总结

发布:2022-06-18 09:12:03 59


本站精选了一篇C++相关的编程文章,网友寿博厚根据主题投稿了本篇教程内容,涉及到C++、strstr函数、C++、strstr函数的使用方法、C++ strstr函数相关内容,已被666网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

C++ strstr函数

C++中strstr函数的实现方法总结

函数说明:

包含文件:string.h

函数名: strstr

函数原型:extern char *strstr(char *str1, char *str2);

功能:从字符串str1中查找是否有字符串str2, 如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回null。

返回值:返回该位置的指针,如找不到,返回空指针。

方法一:

#include <iostream> 
#include <assert.h> 
using namespace std; 
 
char* My_strstr(char *src,char *substr) 
{ 
  assert(src != NULL && substr != NULL); 
 
  unsigned int size = strlen(src); 
  for(int i = 0; i < size; ++i,++src) 
  { 
    char *p = src; 
    for(char *q = substr;;p++,q++) 
    { 
      if(*q == '\0')  //在src中找到连续的substr子串停止并返回 
      { 
        return src; 
      } 
      if(*q != *p) 
      { 
        break; 
      } 
    } 
  } 
 
  return NULL; 
} 
 
int main() 
{ 
  char *res = My_strstr("abcdefg","cde"); 
  if(res != NULL) 
  { 
    cout<<"exist:"<<res<<endl; 
  } 
  else 
  { 
    cout<<"no exist!"<<endl; 
  } 
  return 0; 
} 

方法二:

#include <iostream> 
#include <assert.h> 
using namespace std; 
char* My_strstr(const char* s1,const char* s2) 
{ 
  int n; 
  if(*s2) 
  { 
    while(*s1) 
    { 
      for(n=0;*(s1+n)==*(s2+n);n++) 
      { 
        if(!*(s2+n+1)) 
          return (char*)s1; 
      } 
      s1++; 
    } 
    return NULL; 
  } 
  else 
    return (char*)s1; 
} 
 
int main() 
{ 
  char *res = My_strstr("abcdefg","cde"); 
  if(res != NULL) 
  { 
    cout<<"exist:"<<res<<endl; 
  } 
  else 
  { 
    cout<<"no exist!"<<endl; 
  } 
  return 0; 
} 



方法三:

#include <iostream> 
#include <assert.h> 
using namespace std; 
char* My_strstr(const char* s1,const char* s2) 
{ 
  const char *p=s1; 
  const size_t len=strlen(s2); 
  for(;(p=strchr(p,*s2))!=0;p++)// strchr查找字符串s中首次出现字符c的位置 
  { 
    if(strncmp(p,s2,len)==0) 
    { 
      return(char*)p; 
    } 
  } 
  return(0); 
} 
int main() 
{ 
  char *res = My_strstr("abcdefg","cde"); 
  if(res != NULL) 
  { 
    cout<<"exist:"<<res<<endl; 
  } 
  else 
  { 
    cout<<"no exist!"<<endl; 
  } 
  return 0; 
} 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


参考资料

相关文章

  • C++实现数字转换为十六进制字符串的方法

    发布:2022-04-16

    这篇文章主要介绍了C++实现数字转换为十六进制字符串的方法,涉及C++操作数字与字符串转换的相关技巧,需要的朋友可以参考下


  • C++标准库中sstream与strstream的区别点总结

    发布:2021-06-08

    以下是对C++标准库中sstream与strstream的区别进行了详细的分析介绍,需要的朋友可以过来参考下


  • c++11&14-多线程要点汇总

    发布:2022-04-08

    这篇文章主要介绍了c++11&14-多线程的使用方法,文中代码非常详细,方便大家更好的参考和学习,感兴趣的朋友快来了解下


  • C++多文件变量解析

    发布:2022-04-14

    大家注意不要在头文件中定义变量,在头文件中声明变量。定义放在对应的源文件中。其他地方只能用extern声明


  • C/C++实现双路快速排序算法原理

    发布:2022-04-03

    这篇文章主要为大家详细介绍了C/C++实现双路快速排序算法原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • C++类的成员初始化列表的相关问题总结

    发布:2021-05-17

    下面小编就为大家带来一篇关于C++类的成员初始化列表的相关问题。小编觉得挺


  • C++编译器无法捕捉到的8种错误实例分析

    发布:2021-06-09

    这篇文章主要介绍了C++编译器无法捕捉到的8种错误,是深入学习C++所必须加以掌握的排错技能,需要的朋友可以参考下


  • 浅谈C++函数声明后面加throw()的作用(必看)

    发布:2022-04-14

    下面小编就为大家带来一篇浅谈C++函数声明后面加throw()的作用(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • C++中拷贝构造函数的使用

    发布:2022-04-21

    大家好,本篇文章主要讲的是C++中拷贝构造函数的使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下


  • C++保存txt文件实现方法代码实例

    发布:2022-04-08

    这篇文章主要介绍了C++保存txt文件实现方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


网友讨论