char* strstr(char* str1,char* str2);
strstr函数的作用:strstr是头文件为<string.h>中检索字符串2是否为字符串1的子串。如果是:返回字符串1中子串的地址。如果不是:返回空指针NULL。
例如:
#include<stdio.h>
#include<string.h>
int main()
{ char arr1[]="abcdef";
char arr2[]="cde";
char* ret=strstr(arr1,arr2);
printf("%s",ret);
}
模拟库函数中strtsr的算法以及详解 :用两个指针*x,*y记录字符串1和字符串2第一个字符的地址,用*x检索字符串1。如果*x检索到字符串1中的某个字符a与字符串2的首个字符相等,即从a开始与字符串2内的每个字符开始匹对(从a开始*x与*y匹对)。如果中间有不相等的字符跳出匹对,并且*x重新来到a的下一个字符,*y重新回到字符串2的首字符。*x再次检索,如果又遇到a。再次匹对。直到匹对成功。
代码如下
#include<stdio.h>
char* my_strstr(const char* p1,const char* p2)//用const修饰保持arr1,arr2在检索子串的过程中,字符串的内容不会发生改变。const修饰的变量会具有常量属性。
{
char *s1=NULL;
char *s2=NULL;
char *start=(char*)p1;
if(!*p2)//如果arr2传给*p2的是'\0', 直接返回。'\0'也是arr1的子串。
{
return (char*)p1;//强制类型转换。
}
while(*start)//检索子串的核心算法。
{ s1=start;
s2=(char*)p2;
while(*s1==*s2 && *s2 && *s2)
{
s1++;
s2++;
}
if(!*s2)//是子串。
{
return (char*)start;
}
start++;
}
return NULL;//不是子串。
}
int main()
{ char arr1[]="abcdef";
char arr2[]="cde";
char* ret=my_strstr(arr1,arr2);
printf("%s",ret);
return 0;
}
新人一枚,如有问题请多多关照。