複製鏈接
請複製以下鏈接發送給好友

strstr

(C語言函數)

鎖定
strstr是C語言中的函數,作用是返回字符串中首次出現子串的地址。
外文名
strstr
分    類
C語言函數
作    用
返回字符串中首次出現子串的地址
包含文件
string.h

strstr函數原型

extern char *strstr(char *str1, const char *str2);
語法:
* strstr(str1,str2)
str1: 被查找目標 string expression to search.
str2: 要查找對象 The string expression to find.
返回值:若str2是str1的子串,則返回str2在str1的首次出現的地址;如果str2不是str1的子串,則返回NULL。
例子:
char str[]="1234xyz";
char *str1=strstr(str,"34");
cout << str1 << endl;
顯示的是: 34xyz

strstr函數實現

1.Copyright 1990 Software Development Systems, Inc.
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
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 nullptr;
    } else
        return (char *) s1;
}
3. GCC-4.8.0
char *strstr(const char *s1,const char *s2)
{
    const char *p=s1;
    const int size_tlen=strlen(s2);
    for(;(p=strchr(p,*s2))!=0;p++)
    {
        if(strncmp(p,s2,size_tlen)==0)
            return (char*)p;
    }
    return(0);
}
4. 常用經典實現方法
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))
            s1++, s2++;
        if (!*s2)
            return (cp);
        cp++;
    }
    return NULL;
}

strstr應用舉例

// strstr.c
#include <stdio.h>
#include <string.h>

int main() {
    char *s = "GoldenGlobalView";
    char *l = "lob";
    char *p;
    p = strstr(s, l);
    if (p)
        printf("%s\n", p);
    else
        printf("NotFound!\n");
    
    getchar();
    return 0;
}
//功能:從字串string1 onexxx string2 oneyyy”中尋找”yyy”
(假設xxx和yyy都是一個未知的字串)
char *s = "string1onexxxstring2oneyyy";
char *p;
p = strstr(s, "yyy");
if (p != NULL)
    printf("%s", p);
else
    printf("notfound\n");
説明:如果直接寫語句p=strstr(s,”one”),找到的是onexxxstring2oneyyy
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;
}