strstr函数的介绍
声明
strstr函数是c库函数的一种,使用时需要引#include<string.h>,在字符串 str1 中查找第一次出现字符串 str2 的位置,不包含终止符 ‘\0’。
参数
str1–要被搜索的原字符串
str2–子字符串
返回值
const char * strstr ( const char * str1, const char * str2 );
返回的时在str1中第一次出现str2的位置,如果没有,则返回NULL
strstr函数的模拟实现
简单使用
int main()
{
char* arr1 = "abcdef";
char* arr2 = "cde";
char* ret = strstr(arr1, arr2);
printf("%s\n", ret);
return 0;
}
模拟实现
在设计strstr函数的时候先断言str1和str2不是空指针
然后整体思路是先从str1中的第一个字符为起点开始进行一次匹配查找,
当这个字符与str2的第一个字符相等时让两个地址同时加一,往后寻找(当找到空指针的时候要停止,无论是str1的空指针还是str2的空指针)
如果没找到,str1要回到开始点的下一个字符再次寻找,因此我们需要创建一个cp将值赋给s1.而str2则要返还首字符,因此我们创建一个s2,进行赋值。
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 != NULL);//断言str1和str2不是空指针
assert(str2 != NULL);
const char* s1 = str1;
const char* s2 = str2;
const char* cp = str1;
while (*cp)
{
//一次匹配查找的过程
s1 = cp;
s2 = str2;
while (*s1 & *s2 && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cp;
}
cp++;
}
return NULL;
}
int main()
{
char* arr1 = "abcdef";
char* arr2 = "cde";
char* ret = my_strstr(arr1, arr2);
printf("%s\n", ret);
return 0;
}