strstr 函数的 实现
时间: 2024-11-13 17:16:24 浏览: 25
`strstr`函数在C语言中用于在一个字符串(`str1`)中查找另一个字符串(`str2`)首次出现的位置。它的实现通常涉及到遍历`str1`,逐字符比较直到找到`str2`的匹配或者到达`str1`的结束。
这里有一个自定义版本的`my_strstr`函数[^1],它的工作原理如下:
1. 验证输入参数`str1`和`str2`非空。
2. 初始化两个指针`s1`和`s2`,分别指向`str1`和`str2`的开始。
3. 如果`str2`为空字符串(即第一个字符为`\0`),说明`str2`是`str1`的一部分,直接返回`str1`的地址。
4. 使用`while`循环遍历`str1`:
a. 比较当前字符`cur`与`str2`的对应字符,如果相等,则继续向后移动`s1`和`s2`。
b. 当发现不匹配时,检查`str2`是否已经结束(即`s2`遇到`\0`),如果是,则找到了匹配,返回`cur`。
c. 否则,继续遍历下一个字符`cur`。
5. 如果遍历完整个`str1`都没有找到匹配,返回`NULL`,表示`str2`不在`str1`中。
这个函数会找到`str2`的第一个实例,如果`str2`不存在于`str1`中,它将返回`NULL`。请注意,它假设输入字符串是有效的,不含嵌套的`str2`模式。实际使用时可能需要额外处理这种情况。
相关问题
strstr函数实现
strstr函数是C语言中的字符串处理函数,用于在一个字符串中搜索指定子串的第一次出现位置。
下面是一个简单的strstr函数实现示例:
```c
#include <stdio.h>
char* my_strstr(const char* str, const char* substr) {
if (!*substr) {
return (char*)str;
}
while (*str) {
const char* s1 = str;
const char* s2 = substr;
while (*s1 && *s2 && (*s1 == *s2)) {
s1++;
s2++;
}
if (!*s2) {
return (char*)str;
}
str++;
}
return NULL;
}
int main() {
const char* str = "Hello, World!";
const char* substr = "World";
char* result = my_strstr(str, substr);
if (result != NULL) {
printf("Substring found at index: %ld\n", result - str);
} else {
printf("Substring not found\n");
}
return 0;
}
```
在上述示例中,my_strstr函数接受两个参数:str表示要搜索的字符串,substr表示要搜索的子串。函数通过逐个比较字符的方式来搜索子串的第一次出现位置。如果找到了子串,则返回该位置的指针;否则返回NULL。
在main函数中,我们使用my_strstr函数来搜索字符串"Hello, World!"中的子串"World"。如果找到了子串,则打印出子串在原字符串中的索引;否则打印出"Substring not found"。
不用指针实现strstr函数实现
可以通过两层循环遍历目标字符串和待查找的子字符串进行实现,具体代码如下:
```c
char* my_strstr(const char* str, const char* substr) {
int str_len = strlen(str);
int substr_len = strlen(substr);
for (int i = 0; i <= str_len - substr_len; i++) {
int j;
for (j = 0; j < substr_len; j++) {
if (str[i + j] != substr[j]) {
break;
}
}
if (j == substr_len) {
return (char*) (str + i);
}
}
return NULL;
}
```
在主循环中,通过i变量遍历目标字符串,确保剩余的长度足够容纳子字符串。然后,在内部循环中,使用j变量遍历子字符串,并逐个比较对应位置的字符。如果发现不匹配,则跳出内部循环。如果内部循环正常结束,说明找到了子字符串,返回其在目标字符串中的指针。如果主循环结束后没有找到子字符串,则返回NULL。
阅读全文