strstr函数的使用及模拟实现

简介: 1.strstr函数2.strstr函数的使用3.strstr函数的模拟实现

1.strstr函数


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


strstr函数用于判断字符串str2是否为str1的子串,即str1是否包含str2中所有字符。如果str2是str1的子串,则返回str1中str2第一次出现时首元素的地址,如果不是则返回NULL。  

2.strstr函数的使用

使用strstr函数前,应包含其头文件(#include

#include<stdio.h>#include<string.h>intmain()
{
charstr1[] ="abcdedeaf";
charstr2[] ="dea";
printf("%s\n", strstr(str1, str2));
return0;
}


此时strstr函数返回str1中第二个d的地址,printf函数打印的结果为 deaf


3.strstr函数的模拟实现

模拟实现strstr函数的思路为:定义一个cp指针,移动cp指针,将str1中的字符与str2的首字符相比较,如果相同,则继续比较之后的字符是否与str2之后的字符相同;若不同,则继续比较str1中下一个字符是否与str2的首字符相同。


在str1中字符与str2中首字符相同时,若使用cp指针继续比较后面元素,且移动str2指针,若后面元素不相同,即此时str2不为str1子串,(例如:第一个d与str2中首元素相同,但后面的d与a不同,若此时cp指针与str2指针移动,则cp指针无法比较每一个元素,str2指针无法回到首元素的地址处),因此定义两个指针变量 s1 = cp, s2 = str2,当str1中字符与str2中首字符相同时,用s1与s2进行比较,若s1指向的值与s2指向的值不同,则退出循环,cp++,再比较下一个元素是否与str2中首字符相同。

#include<stdio.h>#include<string.h>#include<assert.h>char*my_strstr(constchar*str1, constchar*str2)
{
//判断str1和str2是否为NULLassert(str1&&str2);
char*cp=str1;
char*s1=cp;
char*s2=str2;
//若str2中首元素为'\0',则直接返回str1if (*str2=='\0')
    {
returnstr1;
    }
while (*cp)
    {
//判断str1中元素是否与str2中首元素相同s1=cp;//当cp与str2中首元素相同时,s1向后移动,并与str2中之后元素比较s2=str2;//当cp与str2中首元素相同时,s2向后移动与str1中之后的元素比较while (*s1&&*s2&&*s1==*s2)
  {
s1++;
s2++;
  }
if (*s2=='\0')
  {
returncp;
  }
cp++;
    }
returnNULL;
}


目录
相关文章
|
7月前
|
C语言
strlen函数【详解+模拟实现】
strlen函数【详解+模拟实现】
|
8月前
|
C语言
模拟库函数strcpy
关于库函数strcpy()的详细内容,跳转文章:《C语言:字符串拷贝函数strcpy()》
22 0
|
5天前
strcat与strncat函数使用与模拟实现
strcat与strncat函数使用与模拟实现
8 0
|
5天前
atoi函数的模拟实现
atoi函数的模拟实现
|
5月前
模拟实现库函数strlen
模拟实现库函数strlen
15 0
|
9月前
strlen函数的两种模拟方法以及使用
strlen函数的两种模拟方法以及使用
|
9月前
模拟实现atoi函数
模拟实现atoi函数
|
10月前
|
存储 Serverless
strlen函数解析与模拟实现
strlen函数解析与模拟实现
strlen函数解析与模拟实现
|
12月前
模拟实现strstr
模拟实现strstr
|
12月前
strcat的模拟实现
strcat的模拟实现