strstr函数

与strchr函数类比就可以知道,这个函数是用来从一个字符串中找出与另一个字符串相同的的部分。

函数原型如下:

char *strstr(char *str1, const char *str2);

返回值:如果str1中含有str2,则会返回str2在str1的首次出现的地址;如果str2不是str1的子串则会返回NULL。

来看一个CPP网站给出的例子:

/* strstr example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="This is a simple string";
  char * pch;
  pch = strstr (str,"simple");
  strncpy (pch,"sample",6);
  puts (str);
  return 0;
}

run后的结果是:This is a sample string.

再来看一下它的实现:

GCC版本:

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);
}

还有一种比较好理解:

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;
}
原文地址:https://www.cnblogs.com/kugwzk/p/5061997.html