在C语言中,strstr是一个用于在字符串中查找子字符串的函数
函数原型如下:
char *strstr(char *haystack, char *needle);
- 该函数接受两个参数:haystack是要进行查找的字符串,needle是要查找的子字符串。
- 函数的返回值是一个指向找到的子字符串在主字符串中的位置的指针,或者如果未找到该子字符串,则返回NULL。
下面我们来用c语言手动实现一下strstr函数:
#include <stdio.h>
#include <string.h>
char *my_strstr(char *haystack, char *needle) {
size_t needle_length = strlen(needle);
size_t haystack_length = strlen(haystack);
if (needle_length > haystack_length)
return NULL;
for (size_t i = 0; i <= haystack_length - needle_length; i++) {
size_t j;
for (j = 0; j < needle_length; j++) {
if (haystack[i + j] != needle[j])
break;
}
if (j == needle_length)
return &haystack[i];
}
return NULL;
}
int main() {
char haystack[] = "Hello, world!";
char needle[] = "world";
char *result = my_strstr(haystack, needle);
if (result != NULL) {
printf("在字符串 '%s' 中找到子串 '%s',位置为:%ld\n", haystack, needle, result - haystack);
} else {
printf("在字符串 '%s' 中未找到子串 '%s'。\n", haystack, needle);
}
return 0;
}
在上述代码中,我们定义了一个名为my_strstr的函数,它与标准库中的strstr函数功能相同。
函数参数char *haystack和char *needle表示主字符串和子字符串。
我们首先计算子字符串和主字符串的长度,并检查子字符串的长度是否超过主字符串,如果是,则直接返回NULL。
然后,我们使用嵌套的循环来在主字符串中查找子字符串。外层循环遍历主字符串,内层循环用于逐个比较子字符串中的字符和主字符串中对应位置的字符。
如果找到了完全匹配的子字符串,我们返回指向匹配位置的指针。
如果遍历完整个主字符串都未找到匹配的子字符串,则返回NULL。
在main函数中,我们声明可修改的字符数组作为主字符串和子字符串,然后调用my_strstr函数来查找子字符串在主字符串中的位置。
最后,根据返回值是否为NULL,我们打印相应的结果。
下面是一个使用strstr函数的示例:
#include <stdio.h>
#include <string.h>
int main() {
char *haystack = "Hello, world!";
char *needle = "world";
char *result = strstr(haystack, needle);
if (result != NULL) {
printf("在主字符串中找到子字符串 '%s',位置为:%d\n", needle, result - haystack);
} else {
printf("在主字符串中未找到子字符串 '%s'\n", needle);
}
return 0;
}
运行结果: