面试题写一下C语言strstr的实现函数
时间: 2023-07-07 20:05:57 浏览: 80
`strstr` 函数是 C 语言标准库中的一个字符串函数,用于在一个字符串中查找另一个字符串的首次出现。下面是一个简单的 `strstr` 实现函数。
```c
char *strstr(const char *str1, const char *str2)
{
const char *p1 = str1;
const char *p2 = str2;
const char *p1_adv = str1;
while (*++p2) {
p1_adv++;
}
while (*p1_adv) {
char *p1_begin = (char *)p1;
char *p2_begin = (char *)p2;
while (*p1 == *p2 && *p2) {
p1++;
p2++;
}
if (!*p2) {
return p1_begin;
}
p1 = p1_begin + 1;
p2 = p2_begin;
p1_adv++;
}
return NULL;
}
```
该实现函数使用了两个指针 `p1` 和 `p2`,分别指向待查找的字符串和查找目标字符串。同时,为了方便后续的查找操作,引入了一个指针 `p1_adv`,该指针在第一个循环中被初始化为字符串 `str1` 的末尾位置,即最后一个字符的下一个位置。
接下来,使用两个嵌套的循环进行查找操作。外层循环遍历整个字符串 `str1`,内层循环用于匹配字符串 `str2` 和 `p1` 指向的字符是否相等。若在匹配过程中发现不匹配的字符,则退出当前内层循环,并将 `p1` 和 `p2` 分别指向下一个位置和字符串 `str2` 的起始位置。若匹配成功,则返回 `p1` 指向的字符位置。
如果整个循环结束后还没有找到匹配的字符串,则返回 `NULL`。
阅读全文