标题:新人自学关于字符串strstr的理解,也不知道对不对。
取消只看楼主
wangjiayou
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2017-6-25
结帖率:75%
 问题点数:0 回复次数:0 
新人自学关于字符串strstr的理解,也不知道对不对。
新人自学,很困惑,以下是自己本人的理解,也不知道我理解的对不对,希望大家指导下哈。环境:win8.1 VS2010

char * __cdecl strstr ( const char * str1, const char * str2 )
{
        char *cp = (char *) str1;       //要对char *str1进行指针操作,所以设置另一个指针变量*cp,指向char *str1的起始位置//
        char *s1, *s2;                    //在对char* str1和char *str2操作的时候,创建char *s1和char *s2,分别表示该两个指针上的指针变量 ///
                                          
        if ( !*str2 )                   //第一种大情况:char *str2是空指针的时候,无论char *s1是否是有效指针,都返回char *s1//
            return((char *)str1);

        while (*cp)     //第二种大情况:当char *s1是有效的指针的时候。要对char *str1进行指针操作,所以这里用指向char *str1的指针变量*cp,而不能用*str1//
        {
                s1 = cp;     //s1表示对char *str1操作时候的指针变量。不能用s1 = str1,因为char *str1是不变的,需要指向char *str1的指针变量即可///
                s2 = (char *) str2;       //s2表示对char *str2操作时候的指针变量//

                while ( *s1 && *s2 && !(*s1-*s2) )   //①当两个指针变量*s1和*s2都为真的时候,*s1和*s2两个指针变量指向的字符相同,找到了子串///
                        s1++, s2++;                   //继续寻找下一个//

                if (!*s2)       //②当*s1为真,*s2为假的时候,没找到子串。返回*str1指向的地址,即*cp。但是这里能用return str1吗?///
                        return(cp);
                cp++;              //记录找到第一对相同字符的地址,地址自增继续寻找下一对相同的字符。///
        }
        return(NULL);
}
搜索更多相关主题的帖子: char 指针 操作 变量 指向 
2018-04-25 14:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486374-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.154648 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved