函數說明:
包含文件: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;
}