【C语言进阶:刨根究底字符串函数】 strstr 函数
本节重点内容:
- 深入理解strstr函数的使用
- 学会strstr函数的模拟实现
⚡strstr
strstr的基本使用:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdebcdef";
char arr2[] = "bcd";
char* p = strstr(arr1, arr2);
if (p == NULL)
{
printf("找不到");
}
else
{
printf("%s\n", p);
}
return 0;
}
若目标字符串中出现多次源字符串的内容,返回第一次源字符串出现的位置。运行结果如下:
⚡strchr
和 strstr 函数比较类似的函数,用于找出一个字符在字符串中第一次出现的位置。
strchr 基本用法:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdebcdef";
char str = 'e';
char* p = strchr(arr1, str);
if (p == NULL)
{
printf("找不到");
}
else
{
printf("%s\n", p);
}
return 0;
}
运行结果如下:
⚡strrchr
strrchr 函数用于找出一个字符在字符串中最后一次出现的位置。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdebcdef";
char str = 'e';
char* p = strrchr(arr1, str);
if (p == NULL)
{
printf("找不到");
}
else
{
printf("%s\n", p);
}
return 0;
}
代码运行结果如下:
⚡模拟实现strstr函数
strstr 函数的模拟实现也是数据结构中串的匹配实现的暴力算法:BF算法。
为了使匹配字符串的过程中,如果发生匹配失败,能够让str1指向目标字符串中字符的下一个字符,str2能够重新回到要找的字符串开始位置,我们需要使用双指针,一个用来记住当前位置,一个来方便匹配过程中指针的移动。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
char* my_strstr(const char* str1, const char* str2)
{
char* s1 = NULL;
const char* s2 = NULL;
const char* cp = str1;
while (*cp)
{
s1 = cp;
s2 = str2;
while (*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cp;
}
cp++;
}
return NULL;
}
int main()
{
char arr1[] = "abbbcdef";
char arr2[] = "bbc";
char* p = my_strstr(arr1, arr2);
if (p == NULL)
{
printf("找不到\n");
}
else
{
printf("%s\n", p);
}
return 0;
}
运行结果如下:
感谢大家能够看完这篇博客,创作时长,小伙伴们觉得我的博客对你有帮助,不妨留下你的点赞的收藏,关注我,带你了解不一样的C语言。