一、什么是strstr
strstr是C语言中用于字符串处理的函数,用于在一个字符串中查找另一个字符串第一次出现的位置。
以下是strstr函数的原型:
char *strstr(const char *haystack, const char *needle);
- haystack是要在其中查找的目标字符串;
- needle是要查找的字符串;
- 返回一个指向haystack中第一次出现needle的位置的指针,如果未找到则返回空指针;
二、如何使用strstr
以下是一个示例,演示了如何使用strstr函数:
//库函数strstr的使用
#include<string.h>//使用strstr库函数时需要包含的头文件
int main()
{
const char* haystack = "Hello, World! This is a simple example.";
const char* needle = "World";
char* result = strstr(haystack, needle);//在haystack中查找needle
//result中存放的是第一次出现needle内容的位置之后的字符串
if (result != NULL)
{
printf("'%s' found at position %ld\n", needle, result - haystack);
printf("%s\n", result);
}
else
{
printf("'%s' not found in '%s'\n", needle, haystack);
}
return 0;
}
三、strstr函数的模拟实现
以下代码模拟实现了strstr函数:
//strstr函数的模拟实现
//strstr函数的原型:char *strstr(const char *haystack, const char *needle);
char* my_strstr(const char* haystack, const char* needle)
{
//要在haystack中查找needle
//haystack为被查找的字符串,needle为要查找的字符串
char* ptr1 = NULL;
char* ptr2 = NULL;
char* current = haystack;//current记录的是每一次比较开始时的指针
while (*needle == '\0')
{
return (char*)haystack;//如果要查找的字符串为空字符串,则返回被查找的字符串
}
while (*current != '\0')
{
//使用指针ptr1、ptr2进行遍历比较
//如果直接使用haystack和needle,haystack和needle在进行比较时的位置会被改变,在下一次进行遍历比较时就不知道从哪里开始了
ptr1 = current;
ptr2 = needle;
while (*ptr1 != '\0' && *ptr2 != '\0' && *ptr1 == *ptr2)
{
ptr1++;
ptr2++;
}
if (*ptr2 == '\0')//如果*ptr2 == '\0',说明空字符前的内容已经在ptr1中找到了
{
return current;//返回开始比较时的指针
}
current++;//如果没有满足上面的条件,就从上一次开始比较的位置的下一个字符开始
}
return NULL;//没有找到
}
int main()
{
char haystack[] = "Hello World!";
char needle[] = "llo";
char* result = my_strstr(haystack, needle);
printf("结果:%s\n", result);
return 0;
}
更多C语言相关练习请跳转: test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com)