admin 管理员组

文章数量: 1086019

strstr()

strstr ()函数: strstr (str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则返回str2在str1中首次出现的地址:否则,返回NULL。 在库函数中 strstr ()函数的原型是 char   strstr   const   char   * str1,  const   char   * str2 ),包含在头文件<string.h>中。 思路:1.判空及判断str1与str2的长度比较; 2. 从字符串str1和str2开始遍历,直到str2结束,即遇见str2的 '\0' ,寻找成功,返回str1与str2第一个字符相等的首地址,否则,返回NULL;

3.在第二种情况下,在相同几步之后有可能有不相等的情况,如:“12234”与“234”,则将开始的str1++,重复第2步;

4..在这里写代码时需注意的几点:const(保证了数据的安全性);char*(为了实现链式访问);重复时的处理即第三种情况。相信,细节乃画龙点睛之笔喔!

5.代码:

(1)在库中的代码如下:


char  strstr  const  char  * str1,  const  char  * str2 ) {          char  *cp = ( char  *) str1;          char  *s1, *s2;             if  ( !*str2 )              return (( char  *)str1);             while  (*cp)          {                  s1 = cp;                  s2 = ( char  *) str2;   

                while ( *s1 && *s2 && !(*s1-*s2) )/*在c语言中指针与指针相减,得到的是元素的个数*/


                         s1++, s2++;                     if  (!*s2)                          return (cp);                     cp++;          }             return (NULL);   

}

(2)我的代码:

# include <stdio.h> char  * my_strstr(  const  char  *s1,  const  char  *s2)   {        int  n=0;   //在开始比较字符相等时走的步数      if  (*s2)        {            while  (*s1)            {                if  (*(s1 + n) == *(s2 + n))              {                  if  (*(s2 + n + 1) == NULL)                  {                      return  ( char  *)s1;                  }                 n++;              }             /* for (n=0; *(s1 + n) == *(s2 + n); n++)                {                       if (*(s2 + n + 1)==NULL)                        return (char *)s1;                }  */              s1++;     //只要第n次不相等时,就进行s1++,直到满足条件时开始返回执行循环语句          }            return  NULL;        }        else            return  NULL;




转载于:

本文标签: strstr()