• strstr 函数用法


    strstr

     编辑
    strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

     

    C语言函数

    编辑
    包含文件:string.h
    函数名: strstr
    函数原型:
    1
    extern char *strstr(char *str1, const char *str2);
    语法:
    1
    strstr(str1,str2)
    str1: 被查找目标 string expression to search.
    str2: 要查找对象 The string expression to find.
    返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
    例子:
    1
    2
    3
    char str[]="1234xyz";
    char *str1=strstr(str,"34");
    cout << str1 << endl;
    显示的是: 34xyz

    函数实现

    1.Copyright 1990 Software Development Systems, Inc.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char *strstr(const char *s1,const char *s2)
    {
     int len2;
     if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
         return(char*)s1;
     for(;*s1;++s1)
     {
         if(*s1==*s2 && strncmp(s1,s2,len2)==0)
         return(char*)s1;
     }
     return NULL;
    }
    2.Copyright 1986 - 1999 IAR Systems. All rights reserved
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    char *strstr(constchar*s1,constchar*s2)
    {
        int n;
        if(*s2)
        {
            while(*s1)
            {
                for(n=0;*(s1+n)==*(s2+n);n++)
                {
                    if(!*(s2+n+1))
                        return(char*)s1;
                }
                s1++;
            }
            return NULL;
        }
        else
            return (char*)s1;
    }
    3. GCC-4.8.0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char *strstr(const char*s1,const char*s2)
    {
        const char*p=s1;
        const size_tlen=strlen(s2);
        for(;(p=strchr(p,*s2))!=0;p++)
        {
            if(strncmp(p,s2,len)==0)
                return (char*)p;
        }
        return(0);
    }

      

    应用举例

    // strstr.c
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <syslib.h>
    #include <string.h>
    main()
    {
        char *s="GoldenGlobalView";
        char *l="lob";
        char *p;
        clrscr();
        p=strstr(s,l);
        if(p)
            printf("%s",p);
        else
            printf("NotFound!");
        getchar();
        return0;
    }
    //功能:从字串” string1 onexxx string2 oneyyy”中寻找”yyy”
    (假设xxx和yyy都是一个未知的字串)
    1
    2
    3
    4
    5
    6
    7
    char *s=”string1onexxxstring2oneyyy”;
    char *p;
    p=strstr(s,”yyy”);
    if(p!=NULL)
        printf(“%s”,p);
    else
        printf("notfound ");
    说明:如果直接写语句p=strstr(s,”one”),找到的是onexxxstring2oneyyy
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    char *mystrstr(char*s1,char*s2)
    {
        if(*s1==0)
        {
            if(*s2)
                return (char*)NULL;
            return (char*)s1;
        }
        while(*s1)
        {
            int i=0;
            while(1)
            {
                if(s2[i]==0)
                    return s1;
                if(s2[i]!=s1[i])
                    break;
                i++;
            }
            s1++;
        }
        return (char*)NULL;
    }
  • 相关阅读:
    Guava Cache,Java本地内存缓存使用实践
    Guava-retry,java重试组件
    [leetcode] 31. 下一个排列
    [leetcode] 30. 与所有单词相关联的字串(cn第653位做出此题的人~)
    [leetcode] 29. 两数相除
    [leetcode] 28. 实现strStr()
    [leetcode] 27. 移除元素
    [leetcode] 26. 删除排序数组中的重复项
    [leetcode] 25. k个一组翻转链表
    [leetcode] 24. 两两交换链表中的节点
  • 原文地址:https://www.cnblogs.com/the-tops/p/5633516.html
Copyright © 2020-2023  润新知