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;