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