目录
前言:
每天深入了解一个字符串类函数,今天我们要学习的是strstr函数,相信你学玩之后会对字符串类函数有更深的了解,坚持下去你又将超过百分之九十九的人。
一、引用头文件
C语言:
#include <string.h>
C++:
#include <cstring>
二、strstr函数的作用
strstr函数是用于判断一个字符串内部是否包含另一个字符串。('\0'不计算于内)
(具体的在定义处讲解)
三、理解strstr函数的定义
char* strstr(const char* str1,const char* str2);
1、返回类型
C语言标准规定:库函数strstr的返回类型为一个char*的指针。
当str1指针指向的字符串包含str2指针指向的字符串时,返回str1指针指向的字符串中str2指向的字符串的起始位地址。
例如:abcdef字符串中包含cde字符串用该函数会返回abcdef字符串中c的地址。
当str1指针指向的字符串不包含str2指针指向的字符串,返回一个空指针即NULL。
2、参数
C语言标准规定:strstr函数的参数有两个,一个为const char* str1(一个字符指针,前用const修饰使其不能通过指针更改其指向的字符串)用于表示要判断是否包含另一个字符串的字符串(可形象理解为长字符串,“长”不含绝对意义);另一个为const char* str2用于表示是否被包含的字符串(可形象理解为短字符串,“短”亦无绝对意义)。
四、使用strstr函数
1、编写程序
#include <string.h>
#include <stdio.h>
int main()
{
char arr1[] = "abbbcdef";
char arr2[] = "bbc";
char* ret = strstr(arr1, arr2);
if (ret == NULL)
{
printf("没找到!\n");
}
else
{
printf("找到了:%s\n",ret);
}
return 0;
}
2、调试运行
五、注意要点
全程无坑,请放心使用。(若有问题可在评论区补充)
六、模拟实现
#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1,const char* str2)
{
assert(str1 && str2);
const char* s1 = NULL;
const char* s2 = NULL;
const char* cp = str1;//代每次比较首字符地址
if (*str2 == '\0')//当str2为空字符串直接返回str1表示起始位置地址
{
return (char*)str1;
}
while (*cp)
{
s1 = cp;//代str1当前比较字符地址
s2 = str2;//代str2当前比较字符地址
while (*s1 == *s2)
{
s1++;
s2++;
if (*s2 == '\0')
{
return (char*)cp;
}
}
cp++;
}
return NULL;
}
int main()
{
char arr1[] = "abbbcdef";
char arr2[] = "bbc";
char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
{
printf("没找到!\n");
}
else
{
printf("找到了:%s\n",ret);
}
return 0;
}
*其中重点循环位置的梳理
while (*s1 == *s2)
{
s1++;
s2++;
if (*s2 == '\0')
{
return (char*)cp;
}
}
当s1位置为'\0',s2位置不为'\0',循环结束;当s1位置不为'\0',s2位置为'\0',因其先加后判会满足if条件结束程序;当s1与s2都为'\0'也会因为满足if条件结束程序。
每日一学,今天你又超过了百分之九十九的人。
如果本篇文章对你有帮助,请点个关注和赞吧!
标签:strstr,函数,str2,str1,char,深解,s2,字符串 From: https://blog.csdn.net/gybhh/article/details/141116742