服务器之家

服务器之家 > 正文

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

时间:2021-06-08 15:33     来源/作者:默伊清风

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

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部