一.strstr()的简介
它用于找到子串(str2)在一个字符串(str1)中第一次出现的位置,引用头文件#include<string.h>
strstr()函数的声明:
char * strstr (char * str1, const char * str2 )
str1:字符串的首地址
str2:子串的首地址
返回类型为字符指针类型,在str1中找str2,如果找到,返回str1字符串的起始位置,如果找不到,返回空指针
二.注意事项
1.str1和str2字符串中一定要有'\0',不然不能正确从字符串查到子串,例如
#include<stdio.h>
#include<string.h>
int main()
{
char arr[]={'a','b','c','d','e','f'};
char brr[]={'b','c','d','e'};
char* ret=strstr(arr,brr);
printf("%s\n",ret);
return 0;
}
结果:
应加上'\0'
#include<stdio.h>
#include<string.h>
int main()
{
//char arr[]="abcdef";
char arr[]={'a','b','c','d','e','f','\0'};
// char brr[]="bcde";
char brr[]={'b','c','d','e','\0'};
char* ret=strstr(arr,brr);
printf("%s\n",ret);
return 0;
}
运行结果:
三.模拟实现strstr
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strstr(const char* str1,const char* str2)
{
assert(*str1&&*str2);//防止指针为空
char* s1=NULL;
char* s2=NULL;
char* cp=str1;
while(*cp)
{
s1=cp;
s2=str2;
while(*s1&&*s2&&(*s1==*s2))
{
s1++;
s2++;
}
if(*s2=='\0')
{
return cp;
}
cp++;
}
return NULL;
}
int main()
{
char arr[]="abcdef";
char brr[]="bcde";
char* ret=my_strstr(arr,brr);
printf("%s\n",ret);
return 0;
}
运行结果: