strstr函数
        【摘要】  /* 包含文件: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>
 
  
   - 
    
     
    
    
     
      //Copyright 1986 - 1999 IAR Systems. All rights reserved
     
    
- 
    
     
    
    
     
      char *strstr(const char *s1, const char *s2)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
     	int n;
     
    
- 
    
     
    
    
     	if (*s2)
     
    
- 
    
     
    
    
     
      	{//s2不是空字符串
     
    
- 
    
     
    
    
     		while(*s1)
     
    
- 
    
     
    
    
     
      		{//开始遍历s1
     
    
- 
    
     
    
    
     			for(n=0; *(s1+n) == *(s2+n); n++)
     
    
- 
    
     
    
    
     
      			{
     
    
- 
    
     
    
    
      if (!*(s2+n+1))
     
    
- 
    
     
    
    
     
       {//如果n值为s2的长度,说明s2是s1的字串
     
    
- 
    
     
    
    
      return (char*)s1;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
      			}
     
    
- 
    
     
    
    
     
      			s1++; //没有找到,指针下移
     
    
- 
    
     
    
    
     
      		}
     
    
- 
    
     
    
    
     		return NULL;   //s2不是s1的字串
     
    
- 
    
     
    
    
     
      	}
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     	return (char*)s1;//s2为空串,返回s1
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      void find_str(char const* str, char const* substr) 
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
      char* pos = strstr(str, substr);
     
    
- 
    
     
    
    
      if(pos) {
     
    
- 
    
     
    
    
      printf("found the string '%s' in '%s' at position: %d\n", substr, str, pos - str);
     
    
- 
    
     
    
    
     
       } else {
     
    
- 
    
     
    
    
      printf("the string '%s' was not found in '%s'\n", substr, str);
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      int main(int argc, char* argv[]) 
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
      char* str = "one two three";
     
    
- 
    
     
    
    
     
       find_str(str, "two");
     
    
- 
    
     
    
    
     
       find_str(str, "");
     
    
- 
    
     
    
    
     
       find_str(str, "nine");
     
    
- 
    
     
    
    
     
       find_str(str, "n");
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      return 0;
     
    
- 
    
     
    
    
     
      }
     
    
 
  
  
   - 
    
     
    
    
     
      1.Copyright 1990 Software Development Systems, Inc.
     
    
- 
    
     
    
    
     
      char *strstr( const char *s1, const char *s2 )
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
     
       int len2;
     
    
- 
    
     
    
    
     
       if ( !(len2 = strlen(s2)) )
     
    
- 
    
     
    
    
     
       return (char *)s1;
     
    
- 
    
     
    
    
     
       for ( ; *s1; ++s1 )
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
      if ( *s1 == *s2 && strncmp( s1, s2, len2 )==0 )
     
    
- 
    
     
    
    
     
         return (char *)s1;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
       return NULL;
     
    
- 
    
     
    
    
     
      }
     
    
 
  
  
   - 
    
     
    
    
     
      GCC-4.8.0
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      char *
     
    
- 
    
     
    
    
     
       strstr (const char *s1, const char *s2)
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
     
         const char *p = s1;
     
    
- 
    
     
    
    
      const size_t len = strlen (s2);
     
    
- 
    
     
    
    
     
         for (; (p = strchr (p, *s2)) != 0; p++)
     
    
- 
    
     
    
    
     
         {
     
    
- 
    
     
    
    
      if (strncmp (p, s2, len) == 0)
     
    
- 
    
     
    
    
      return (char *)p;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      return (0);
     
    
- 
    
     
    
    
     
       }
     
    
 
  
  
   - 
    
     
    
    
     
      char *strstr(char *s1 , char *s2)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
       if(*s1==0)
     
    
- 
    
     
    
    
     
        {
     
    
- 
    
     
    
    
      if(*s2) return(char*)NULL;
     
    
- 
    
     
    
    
      return (char*)s1;
     
    
- 
    
     
    
    
     
        }
     
    
- 
    
     
    
    
       while(*s1)
     
    
- 
    
     
    
    
     
        {
     
    
- 
    
     
    
    
      int i=0;
     
    
- 
    
     
    
    
      while(1)
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
      if(s2[i]==0) return s1;
     
    
- 
    
     
    
    
      if(s2[i]!=s1[i]) break;
     
    
- 
    
     
    
    
     
       i++;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
       s1++;
     
    
- 
    
     
    
    
     
        }
     
    
- 
    
     
    
    
       return (char*)NULL;
     
    
- 
    
     
    
    
     
      }
     
    
 
  
  
   - 
    
     
    
    
     
      //linux源码
     
    
- 
    
     
    
    
     
      #ifndef __HAVE_ARCH_STRSTR 
     
    
- 
    
     
    
    
     
      /** 
     
    
- 
    
     
    
    
     
       * strstr - Find the first substring in a %NUL terminated string 
     
    
- 
    
     
    
    
     
       * @s1: The string to be searched 
     
    
- 
    
     
    
    
     
       * @s2: The string to search for 
     
    
- 
    
     
    
    
     
       */  
     
    
- 
    
     
    
    
     
      char *strstr(const char *s1, const char *s2) 
     
    
- 
    
     
    
    
     
      {  
     
    
- 
    
     
    
    
      size_t l1, l2;  
     
    
- 
    
     
    
    
       
     
    
- 
    
     
    
    
     
       l2 = strlen(s2);  
     
    
- 
    
     
    
    
      if (!l2)  
     
    
- 
    
     
    
    
      return (char *)s1;  
     
    
- 
    
     
    
    
     
       l1 = strlen(s1);  
     
    
- 
    
     
    
    
      while (l1 >= l2) {  
     
    
- 
    
     
    
    
     
       l1--;  
     
    
- 
    
     
    
    
      if (!memcmp(s1, s2, l2))  
     
    
- 
    
     
    
    
      return (char *)s1;  
     
    
- 
    
     
    
    
     
       s1++;  
     
    
- 
    
     
    
    
     
       }  
     
    
- 
    
     
    
    
      return NULL;  
     
    
- 
    
     
    
    
     
      }  
     
    
- 
    
     
    
    
     
      EXPORT_SYMBOL(strstr);  
     
    
- 
    
     
    
    
     
      #endif 
     
    
 文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/11928957
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)