请编写 strstr(char *str1,char *str2)的实现代码
时间: 2024-11-30 07:21:30 浏览: 5
`strstr`函数在C语言标准库中并不存在,但你可以自行实现它。以下是基本的C语言版本,用于在一个字符串中查找另一个字符串第一次出现的位置:
```c
#include <stdio.h>
#include <string.h>
size_t strstr_custom(char* str1, char* str2) {
if (!str1 || !str2) {
return (size_t)-1; // 空指针处理
}
size_t str1_len = strlen(str1), str2_len = strlen(str2);
for (size_t i = 0; i <= str2_len; ++i) {
if (str1[i] != str2[i]) {
continue; // 如果当前字符不匹配,跳过
}
if (i == str2_len) {
// 找到了完整的str2,返回其索引
return i;
} else if (str1[i] == str2[i] && memccpy(&str1[i], str2 + i, '\0', str2_len - i) == str2_len - i) {
// 如果后续部分完全匹配,返回当前位置
return i;
}
}
return (size_t)-1; // 没有找到匹配,返回-1
}
int main() {
const char* str1 = "lazy";
const char* str2 = "The quick brown dog jumps over the lazy fox";
int position = strstr_custom(str1, str2);
if (position != -1)
printf("'%s' found at index %zd in '%s'\n", str1, position, str2);
else
printf("'%s' not found in '%s'\n", str1, str2);
return 0;
}
```
这个函数遍历`str2`中的每一个字符,检查它们是否与`str1`的相应位置相等,如果相等并且后面的字符也完全匹配,就返回相应的索引。如果没有找到匹配,最后返回-1。
阅读全文