C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)
C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)
函數(shù)說明:
包含文件:string.h
函數(shù)名: strstr
函數(shù)原型: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中找到連續(xù)的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中首次出現(xiàn)字符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;
}
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Qt實(shí)現(xiàn)FTP的上傳和下載的實(shí)例代碼
本篇文章主要介紹了Qt實(shí)現(xiàn)FTP的上傳和下載的實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
c++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)
下面小編就為大家?guī)硪黄猚++中數(shù)字與字符串之間的轉(zhuǎn)換方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09

