模拟实现strstr、strrstr

来源:互联网 发布:iphoto下载 mac 编辑:程序博客网 时间:2024/05/22 12:22

strstr表示在字符串中找子串,其原型为:

char *strstr( const char *string, const char *strCharSet );

这个函数的含义是是,在string中找strCharSet第1次出现的位置,并返回一个指向该位置的指针。如果strCharSet并没有完整的出现在string的任何位置,函数返回一个NULL指针,如果函数的第二个参数为一个空字符串,函数则返回string。
标准函数库里面并没有strrstr这个函数,这个函数的含义便是在第一个字符串找第二个字符串最后一次出现的位置,原理与strstr相同。
下面我们来模拟实现这两个函数,从而加强对这个函数的了解,

**//模拟实现strstr(在字符串中查找一个子串)(在s1中查找s2第一次出现的位置)**
#include<stdio.h>#include<stdlib.h>#include<assert.h>char *my_strstr(const char *str, const char *substr){    assert(str);    assert(substr);    char*s1 = str;    char*s2 = substr;    char*cur = str;//当前位置    while (*cur)    {        s1 = cur;        s2 = substr;        while (*str == *substr)        {            str++;            substr++;        }        if (*substr == NULL)        {            return (char*)str;        }        else            return NULL;    }}int main(){    char *arr = "abefcdef";    char*buf = "h";    char*ret=strstr(arr, buf);    if (ret != NULL)    {        printf("%s", ret);    }    else    {        printf("NULL");    }    system("pause");    return 0;}
**//模拟实现strrstr(在字符串中查找一个子串)(在s1中查找s2最后一次出现的位置)**
#include<stdio.h>#include<stdlib.h>#include<assert.h>const char*my_strrstr(const char *sub, const char*substr){    int i = 0;    int j = 0;    const char*ret = NULL;    for (i = 0; sub[i] != 0; i++)    {        for (j = 0; substr[j] != 0; j++)        {            if (sub[i + j] != substr[j])                break;        }            if (substr[j] == 0)            {                ret = sub + i;            }    }    return ret;}int main(){    const char *arr = "abefcdef";    const char*buf = "ef";    char*ret = my_strrstr(arr, buf);    if (ret != NULL)    {        printf("%s\n", ret);    }    else    {        printf("NULL");    }    system("pause");    return 0;}
原创粉丝点击