C++中strstr函数的实现方法总结

时间:2022-09-19 18:10:41

C++中strstr函数的实现方法总结

函数说明:

包含文件:string.h

函数名: strstr

函数原型:extern char *strstr(char *str1, char *str2);

功能:从字符串str1中查找是否有字符串str2, 如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回null。

返回值:返回该位置的指针,如找不到,返回空指针。

方法一:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <assert.h>
using namespace std;
 
char* My_strstr(char *src,char *substr)
{
  assert(src != NULL && substr != NULL);
 
  unsigned int size = strlen(src);
  for(int i = 0; i < size; ++i,++src)
  {
    char *p = src;
    for(char *q = substr;;p++,q++)
    {
      if(*q == '\0'//在src中找到连续的substr子串停止并返回
      {
        return src;
      }
      if(*q != *p)
      {
        break;
      }
    }
  }
 
  return NULL;
}
 
int main()
{
  char *res = My_strstr("abcdefg","cde");
  if(res != NULL)
  {
    cout<<"exist:"<<res<<endl;
  }
  else
  {
    cout<<"no exist!"<<endl;
  }
  return 0;
}

方法二:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <assert.h>
using namespace std;
char* My_strstr(const char* s1,const char* 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;
}
 
int main()
{
  char *res = My_strstr("abcdefg","cde");
  if(res != NULL)
  {
    cout<<"exist:"<<res<<endl;
  }
  else
  {
    cout<<"no exist!"<<endl;
  }
  return 0;
}

方法三:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <assert.h>
using namespace std;
char* My_strstr(const char* s1,const char* s2)
{
  const char *p=s1;
  const size_t len=strlen(s2);
  for(;(p=strchr(p,*s2))!=0;p++)// strchr查找字符串s中首次出现字符c的位置
  {
    if(strncmp(p,s2,len)==0)
    {
      return(char*)p;
    }
  }
  return(0);
}
int main()
{
  char *res = My_strstr("abcdefg","cde");
  if(res != NULL)
  {
    cout<<"exist:"<<res<<endl;
  }
  else
  {
    cout<<"no exist!"<<endl;
  }
  return 0;
}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/baoge_leopard/article/details/39779959