C++中strstr函数的实现方法总结
2017-10-31 10:25
656 查看
函数说明:
包含文件: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; }
相关文章推荐
- TensorFlow使用C++加载使用训练好的模型,.cc文件代码实现的相关类及方法总结
- C++学习总结_声明一个对象并实现声明类的方法
- k均值聚类方法总结与C++实现
- C++实现二叉树非递归遍历方法实例总结
- C++实现二叉树前序中序后续遍历的非递归方法总结
- 单例模式c++实现方法总结
- c++中strstr函数的几种实现方法
- C++实现WEB功能方法总结
- C++实现单例的5种方法总结
- 在C++中实现库动态初始化的一种方法
- C++代码优化方法总结
- 自动刷新页面的实现方法总结
- 绘制不规则位图方法总结,多种实现方法,全面测试比较
- ASP.NET AJAX (Atlas) 拖放(Drag & Drop)功能6种实现方法总结
- 实现div可编辑的常见方法总结
- 批量删除记录时如何实现全选方法总结
- c++实现单向链表反转的学习总结
- C++代码优化方法总结
- 探索c++的函数pow()的实现方法·数学与程序设计的结合(绝对原创)
- 经常遇到询问SQLSERVER中如何实现类似ORC里面的ROWNUM的方法,一般有两种方法,现总结如下