C中strstr的实现方法

原创 2015年07月10日 17:01:45

做题目的时候需要自己实现strstr函数

/************************************************************************/
/*       编写函数IND,让它判断一个字符串是否为另一个字符串的子串的功能,若是则返回第一次出现的起始位置,否则返回0。  
/*
/************************************************************************/

#include <stdio.h>
#include <assert.h>

const char * IND(const char * str, const char * substr)
{
    assert(substr != NULL && str != NULL);
    const char * psub = substr;
    const char * pstr = str;

    while (*pstr)
    {
//      if (*pstr != *psub)
//          continue;

        const char * tmp = pstr;
        while (*tmp++ == *psub++);

        if (*psub == '\0')
            return pstr;

        psub = substr;
        pstr++;
    }

    return NULL;
}

int main()
{
    //char * substr = "hello";
    char * substr = "";
    char * str = "skljdfhellosjdlf";

    const char * res = IND(str, substr);
    if (res != NULL)
        printf("%s\n", res);
    else
        printf("not find\n");

    res = strstr(str, substr);
    if (res != NULL)
        printf("%s\n", res);
    else
        printf("not find\n");

    return 0;
}

这是微软提供的库函数版本

/***
*strstr.c - search for one string inside another
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines strstr() - search for one string inside another
*
*******************************************************************************/

#include <cruntime.h>
#include <string.h>

/***
*char *strstr(string1, string2) - search for string2 in string1
*
*Purpose:
*       finds the first occurrence of string2 in string1
*
*Entry:
*       char *string1 - string to search in
*       char *string2 - string to search for
*
*Exit:
*       returns a pointer to the first occurrence of string2 in
*       string1, or NULL if string2 does not occur in string1
*
*Uses:
*
*Exceptions:
*
*******************************************************************************/

char * __cdecl 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) )
                        s1++, s2++;

                if (!*s2)
                        return(cp);

                cp++;
        }

        return(NULL);

}

得到的效果是一致的, 不过, 我们这里没有使用强制类型转化将const char * 转化为 char *类型,(其实从这点上来看, C中的const只是一个纸老虎, 一个强制类型转换就没了<-_->!!)
库函数代码中

 if ( !*str2 )
            return((char *)str1);

感觉似乎没有这段也是可以输出预期的结果的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

C语言之strstr函数

【FROM MSDN && 百科】 原型:char *strstr(const char *str1, const char *str2); #include 找出str2字符串...
  • hgj125073
  • hgj125073
  • 2012年12月27日 17:32
  • 52892

C语言中的strstr函数的用法

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。 PHP语言函数 编辑 ...
  • SMF0504
  • SMF0504
  • 2016年05月11日 10:11
  • 9227

strstr函数用法小结

strstr 函数原型: char * strstr(char * str1,char * str2);功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符...
  • u013298384
  • u013298384
  • 2014年05月01日 13:28
  • 1778

strstr函数

函数原型:extern char *strstr(char *haystack, char *needle) 参数说明:haystack为一个源字符串的指针,needle为一个目的字符串的指针。 ...
  • Tommy_wxie
  • Tommy_wxie
  • 2012年05月10日 15:36
  • 18812

strstr和strchr的区别

看函数的原型定义: 1.strstr:
  • wusuopuBUPT
  • wusuopuBUPT
  • 2014年08月21日 23:37
  • 10427

strstr的用法

/**strstr的用法:** /**strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。 /**找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址; /**如果未找到所搜索...
  • dldw8816
  • dldw8816
  • 2014年11月14日 09:41
  • 1309

strstr函数

函数原型:extern char *strstr(char *haystack, char *needle) 参数说明:haystack为一个源字符串的指针,needle为一个目的字符串的指针。 所在...
  • kevinhg
  • kevinhg
  • 2015年04月30日 10:15
  • 1853

strstr函数

strstr函数
  • huguangshanse00
  • huguangshanse00
  • 2015年10月25日 14:53
  • 2402

strstr函数实现

实现自己的strstr函数:返回主串中子字符串的位置后的所有字符。 如:主串“12345678”,字串“45”,函数返回“45678” #include const char *my_st...
  • yuliu0552
  • yuliu0552
  • 2011年08月21日 23:20
  • 15224

函数strstr,strcasestr

 一.strstr 1.调用格式  #include  char *strstr(const char *haystack, const char *needle); 2.功能说明 ...
  • a1009563517
  • a1009563517
  • 2015年08月25日 08:29
  • 3871
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C中strstr的实现方法
举报原因:
原因补充:

(最多只允许输入30个字)