strstr函数

举报
悦来客栈的老板 发表于 2020/12/28 22:59:10 2020/12/28
【摘要】 /* 包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(char *str1, char *str2); 功能:从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。      如果s2为空串,则...

/*
包含文件:string.h
函数名: strstr
函数原型:extern char *strstr(char *str1, char *str2);
功能:从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。
     如果s2为空串,则返回s1
返回值:返回该位置的指针,如找不到,返回空指针。
*/

#include <stdio.h>

 

  
  1. //Copyright 1986 - 1999 IAR Systems. All rights reserved
  2. char *strstr(const char *s1, const char *s2)
  3. {
  4. int n;
  5. if (*s2)
  6. {//s2不是空字符串
  7. while(*s1)
  8. {//开始遍历s1
  9. for(n=0; *(s1+n) == *(s2+n); n++)
  10. {
  11. if (!*(s2+n+1))
  12. {//如果n值为s2的长度,说明s2是s1的字串
  13. return (char*)s1;
  14. }
  15. }
  16. s1++; //没有找到,指针下移
  17. }
  18. return NULL; //s2不是s1的字串
  19. }
  20. return (char*)s1;//s2为空串,返回s1
  21. }
  22. void find_str(char const* str, char const* substr)
  23. {
  24. char* pos = strstr(str, substr);
  25. if(pos) {
  26. printf("found the string '%s' in '%s' at position: %d\n", substr, str, pos - str);
  27. } else {
  28. printf("the string '%s' was not found in '%s'\n", substr, str);
  29. }
  30. }
  31. int main(int argc, char* argv[])
  32. {
  33. char* str = "one two three";
  34. find_str(str, "two");
  35. find_str(str, "");
  36. find_str(str, "nine");
  37. find_str(str, "n");
  38. return 0;
  39. }


 


  
  1. 1.Copyright 1990 Software Development Systems, Inc.
  2. char *strstr( const char *s1, const char *s2 )
  3. {
  4.  int len2;
  5.  if ( !(len2 = strlen(s2)) )
  6.  return (char *)s1;
  7.  for ( ; *s1; ++s1 )
  8.  {
  9. if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
  10.  return (char *)s1;
  11.  }
  12.  return NULL;
  13. }


 

 


  
  1. GCC-4.8.0
  2. char *
  3.  strstr (const char *s1, const char *s2)
  4.  {
  5.  const char *p = s1;
  6. const size_t len = strlen (s2);
  7.   for (; (p = strchr (p, *s2)) != 0; p++)
  8.  {
  9. if (strncmp (p, s2, len) == 0)
  10. return (char *)p;
  11. }
  12. return (0);
  13.  }


 

 


  
  1. char *strstr(char *s1 , char *s2)
  2. {
  3. if(*s1==0)
  4. {
  5. if(*s2) return(char*)NULL;
  6. return (char*)s1;
  7. }
  8. while(*s1)
  9. {
  10. int i=0;
  11. while(1)
  12. {
  13. if(s2[i]==0) return s1;
  14. if(s2[i]!=s1[i]) break;
  15. i++;
  16. }
  17. s1++;
  18. }
  19. return (char*)NULL;
  20. }


 


  
  1. //linux源码
  2. #ifndef __HAVE_ARCH_STRSTR
  3. /**
  4. * strstr - Find the first substring in a %NUL terminated string
  5. * @s1: The string to be searched
  6. * @s2: The string to search for
  7. */
  8. char *strstr(const char *s1, const char *s2)
  9. {
  10. size_t l1, l2;
  11. l2 = strlen(s2);
  12. if (!l2)
  13. return (char *)s1;
  14. l1 = strlen(s1);
  15. while (l1 >= l2) {
  16. l1--;
  17. if (!memcmp(s1, s2, l2))
  18. return (char *)s1;
  19. s1++;
  20. }
  21. return NULL;
  22. }
  23. EXPORT_SYMBOL(strstr);
  24. #endif

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/11928957

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。