【strstr函数实现】在C语言中,`strstr` 是一个常用的字符串处理函数,用于查找一个字符串是否包含另一个子字符串。它在标准库 `
一、函数概述
| 名称 | 类型 | 功能说明 |
| `strstr` | 函数 | 在一个字符串中查找另一个子字符串 |
| 参数 | `const char` | 第一个参数为原字符串,第二个为子串 |
| 返回值 | `char` | 返回子串首次出现的地址,若未找到则返回 `NULL` |
二、函数原型
```c
char strstr(const char haystack, const char needle);
```
- haystack:要搜索的主字符串。
- needle:要查找的子字符串。
三、实现思路
1. 遍历 `haystack` 的每一个字符作为起始点。
2. 对于每个起始点,检查从该位置开始的子串是否与 `needle` 相等。
3. 如果相等,返回当前起始点的指针。
4. 如果遍历完整个 `haystack` 仍未找到匹配项,返回 `NULL`。
四、实现代码(C语言)
```c
include
include
char my_strstr(const char haystack, const char needle) {
if (needle == '\0') return (char )haystack; // 空字符串总是存在
while (haystack != '\0') {
const char h = haystack;
const char n = needle;
while (h != '\0' && n != '\0' && h == n) {
h++;
n++;
}
if (n == '\0') {
return (char )haystack; // 找到匹配
}
haystack++;
}
return NULL; // 未找到
}
```
五、使用示例
```c
int main() {
char str[] = "Hello, world!";
char substr[] = "world";
char result = my_strstr(str, substr);
if (result != NULL) {
printf("Substring found at position: %ld\n", result - str);
} else {
printf("Substring not found.\n");
}
return 0;
}
```
六、注意事项
| 事项 | 说明 |
| 空字符串处理 | 若 `needle` 为空,则返回 `haystack` |
| 大小写敏感 | `strstr` 是大小写敏感的 |
| 性能问题 | 对于长字符串,可能效率较低 |
| 不修改原始字符串 | 该函数不会修改输入的字符串内容 |
七、对比标准库函数
| 特性 | 自定义 `my_strstr` | 标准库 `strstr` |
| 是否支持空字符串 | ✅ | ✅ |
| 是否可重入 | ✅ | ✅ |
| 是否线程安全 | ✅ | ✅ |
| 实现复杂度 | 中等 | 简单 |
八、总结
`strstr` 是一个非常实用的字符串查找函数,在实际开发中经常被使用。理解其原理有助于更好地掌握字符串操作逻辑。通过自定义实现,可以加深对底层机制的理解,并根据需要进行优化或扩展。


