1. strstr 函数
1.1 函数简介
strstr 函数为 C 库函数之一,用于检索子串在字符串中首次出现的位置。
- 原型:
char* strstr (char* str, char* substr);
- 所属头文件:<string.h>
- 功能:在字符串
str
中检索子串substr
。- 返回:如果找到,返回子串在字符串中的地址;如果没找到,返回 NULL。
1.2 函数说明
- 在调用原函数时,当传参 substr 指向为字符为
'\0'
时,函数返回的是目标字符串 str 原本指向的地址,即返回了整个目标字符串。
1.3 函数实现
char* strstr(const char* str, const char* substr)
{
if (substr == '\0')
{
return str;
}
// 检索子串
while (*str != '\0')
{
// 找到子串的第一个字符在目标字符串中的位置
if (*str == *substr)
{
const char* pstr = str;
const char* psubstr = substr;
while ((*pstr != '\0') && (*pstr++ == *psubstr++))
{
if (*psubstr == '\0')
{
return str;
}
}
if (*pstr == '\0')
{
// 子串已长于目标字符串的剩余部分
break;
}
}
str++;
}
// 检索失败返回 NULL
return NULL;
}
2. strchr 函数
2.1 函数简介
strchr 函数为 C 库函数之一,用于检索目标字符在字符串中首次出现的位置。
- 原型:
char* strchr (const char* str, int c);
- 所属头文件:<string.h>
- 功能:在字符串
str
查找目标字符c
。- 返回:如果找到,则返回第一个找到的目标字符的地址,否则返回 NULL。
2.2 函数说明
- 实现方法有循环与递归两种方法,在下文中也会一并实现。
2.3 函数实现
- 循环方法
char* strchr(const char* str, int c)
{
while (*str != '\0')
{
if (*str == c)
{
return (char*)str;
}
str++;
}
return NULL;
}
- 递归方法
char* strchr(const char* str, int c)
{
if (*str == '\0')
{
return NULL;
}
else if (*str == c)
{
return (char*)str;
}
else
{
return strchr(str + 1, c);
}
}