持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
🚩write in front🚩
🔎大家好,我是泽奀,希望你看完后。能对你有所帮助,不足请指正,共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜77»总榜1766🏅
🆔本文由 謓泽 原创 掘金/CSDN/infoQ 如需转载还请通知⚠
📝个人主页-掘金 (juejin.cn)💬
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏-[C系列] 从0到1 - 泽奀的专栏 - 掘金 (juejin.cn)🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
🎍strstr() - 在一个字符串中查找另外一个字符串🎍
strstr() 函数的声明方式如下 👇
char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。
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
这个代码的实现相对来说比上面的代码都要比较复杂,希望各位理解了可以自己上手做下,因为自有当你把代码打出来了,那么才是你学到的知识。