0
点赞
收藏
分享

微信扫一扫

【C语言】strstr() - 在一个字符串中查找另外一个字符串。

前言

在前面的文章 strlen()、strcpy()、strcat()、strcmp() 的四个字符串函数、这四个是最基本也是我们最常用的字符串函数、接下来我们要介绍的可能很多小伙伴比较陌生的字符串函数了,但是我们也是必须要认识的。例->

1.strstr() - 在一个字符串中查找另外一个字符串。

2.strtok() - 切割字符串。

3.strerror() - 返回错误码。​

 🎍strstr() - 在一个字符串中查找另外一个字符串🎍

strstr() 函数的声明方式如下 👇 

char *strstr(const char *haystack, const char *needle)

haystack→ 要被检索的 C 字符串。

needle→ 在 haystack 字符串内要搜索的小字符串。

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

注意:这里的返回值的指针类型可以是void也可以是char *🧨

🎍strstr()函数代码示例🎍

题目:在arr1中查找是否包含arr2中的数组。要求使用 strstr() 库函数。

使用 strncpy() 函数代码示例如下 👇

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main(void)
{
char arr1[20] = "abcdef";
char arr2[20] = "bcd";
char ret = strstr(arr1, arr2);
if (ret == NULL)
{
printf("没找到!\n");
}
else
{
printf("找到了→%s\n", ret);
}
return 0;
}

运行结果如下 👇 

找到了→bcdef

那没找到的情况下,我们把 arr2 数组修改下。其它值不变🎉

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main(void)
{
char arr1[20] = "abcdef";
char arr2[20] = "bf";
char *ret = strstr(arr1, arr2);
if (ret == NULL)
{
printf("没找到%s!\n",ret);
}
else
{
printf("找到了→%s\n", ret);
}
return 0;
}

运行结果如下 👇 

找不到(null)!

对比之下,你发现了区别了没👀

🎍创建自定义函数实现strstr()🎍

分析思路🧐

其实很容易,我们只需要拿首字符地址进行比较相等的话返回,不相等的时候进行自增++(注意:这里自增++只需要str1进行++而str2依旧拿首元素地址跟它进行比较),再进行比较直到'\0',没有就返回空指针NULL。如果str1有元素和str2首元素地址匹配上了的话那么就继续往后走~但是,这个仅仅是假设 abcd 和 bcd 所适用的场景。如果是 bbbc 和 bbc,这种怎么办?是不是发现用这种思路不行,下面就用代码来讲解下怎么实现。

示例代码如下:👇  

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strstr(const char *str1, const char *str2)
{
assert(str1 && str2 != NULL);
const char* s1 = NULL;
const char* s2 = NULL;//在不知道赋值什么的情况下直接赋值空指针。
if (*str2 == '\0')
return (char*)str1;//假设str2首元素地址为空字符串直接返回str1
while (*str1)
{
s1 = str1;
s2 = str2;
while (*s1 && *s2 != '\0' && (*s1 == *s2))
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)str1;//注意返回类型强制转换!
}
str1++;
}
return NULL;
}
int main(void)
{
char arr1[20] = "abbcdef";
char arr2[20] = "bc";
char *ret = my_strstr(arr1, arr2);
if (ret == NULL)
{
printf("没找到%s!\n",ret);
}
else
{
printf("找到了→%s\n", ret);
}
return 0;
}

运行结果如下 👇 

bcdef 

这个代码的实现相对来说比上面的代码都要比较复杂,希望各位理解了可以自己上手做下,因为自有当你把代码打出来了,那么才是你学到的知识。

【C语言】strstr() - 在一个字符串中查找另外一个字符串。_bc_05

举报

相关推荐

0 条评论