码迷,mamicode.com
首页 > 其他好文 > 详细

strstr()

时间:2016-04-19 14:30:04      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:函数 字符 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;




本文出自 “magoYang” 博客,谢绝转载!

strstr()

标签:函数 字符 strstr

原文地址:http://10742272.blog.51cto.com/10732272/1765322

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!