C语言详细解读函数:strstr()函数
C语言函数strstr详细解读,包括其基本概念,使用方法,实现原理和注意事项。
💓 博客主页:Kitten饭团的CSDN主页
📁 文章专栏:C语言专栏
期待您的关注
目录
string头文件其他相关库函数文章:C语言详细解读函数:strlen()函数
函数概念来自于网站http://cplusplus.com
头文件为<string.h>
一、strstr函数的基本概念
1.1 函数定义
函数的原型:
参数说明:
🌈 函数参数str1的含义:要扫描的C字符串。
🌈 函数参数str2的含义:包含要匹配的字符序列的C字符串。
🌈 参数类型const char*的含义:表示传递的参数为char型的常目标指针。
1.2 功能描述
功能:定位子字符串。
实现原理:
🌈 返回指向 str1 中第一次出现 str2 的指针,如果 str2 不是 str1 的一部分,则返回空指针。
🌈 匹配过程不包括终止空字符(\0),但会在那里停止。返回的是从匹配的子字符串开始到原字符串结束的部分。
二、strstr函数的使用方法
2.1 基本用法示例
使用方法:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[20] = "Hello world!";
char str2[20] = "world"; //需要查找得字符串为"world"
char *ret = strstr(str1, str2);
printf("ret == %s\n", ret);
return 0;
}
打印结果:
2.2 常用的场景
🌈 字符串搜索
char text[] = "This is a simple example.";
char keyword[] = "simple";
if (strstr(text, keyword) != NULL)
{
printf("Keyword found!\n");
}
else
{
printf("Keyword not found.\n");
}
三、strstr函数的实现原理
内部实现机制:根据函数的基本概念来写一个自己的 strstr函数
示例代码:
#include <stdio.h>
#include <string.h>
/**
* @brief 在指定的一个字符串中,找到一个子串
* @note None
* @param str1:要扫描的C字符串
str2:包含要匹配的字符序列的C字符串。
* @retval 成功:返回指向找到的字符的指针
失败:返回NULL
*/
const char* MyLib_StrStr(const char *str1, const char *str2)
{
// 1、判断输入的两个字符串是否为NULL,为NULL就直接退出
if (str1 == NULL || str2 == NULL)
{
return NULL;
}
// 2、遍历str1字符串,找到所有可能
while (*str1 != '\0')
{
const char *current_str1 = str1;
const char *current_str2 = str2;
// 进入循环依次比较两个字符串的字符是否一致
while (*current_str1 == *current_str2 && *current_str2 != '\0')
{
current_str1++;
current_str2++;
}
// 判断current_str2是否指向'\0',是的话,就意味着找到了str1中的子串str2
if (*current_str2 == '\0')
{
return str1; // 返回str1中的子串的地址
}
str1++;
}
// 3、没有找到该子串,就返回NULL
return NULL;
}
// 主函数
int main()
{
// (1)、官方写的库
const char *s1 = "Hello,world!!!";
const char *s2 = "world!";
const char *p1 = strstr(s1, s2);
printf("p1 == %s\n", p1);
// (2)、自己写的库
const char *s3 = "Hello,world!!!";
const char *s4 = "world!";
const char *p2 = MyLib_StrStr(s3, s4);
printf("p2 == %s\n", p2);
return 0;
}
四、strstr函数的注意事项
4.1 空指针检查
🌈 问题:如果传入的 str1 或 str2 是 NULL,strstr 的行为是未定义的,可能会导致程序崩溃。
🌈 解决方法:在使用 strstr 之前,确保输入的字符串指针不为 NULL。
示例:
if (*str2 == '\0')
{
// 处理空字符串的情况
return str1;
}
4.2 字符串的终止符
🌈 问题:strstr 的匹配过程不包括终止的空字符(‘\0’),但它会在终止符处停止匹配。如果 str2 是空字符串(""
),strstr 会返回 str1 的起始地址。
🌈 解决方法:如果 str2
可能是空字符串,需要特别处理。
示例:
if (*str2 == '\0')
{
// 处理空字符串的情况
return str1;
}
strstr函数的内容到此结束了,要是有不足希望各位能够在评论区指出,要是文章对你有帮助,可以给个免费的赞和收藏💞💞💞
更多推荐
所有评论(0)