库函数strstr的实现

时间:2023-03-09 00:12:41
库函数strstr的实现

没什么说的,常规思路:

函数原型:const char* StrStr(const char *str1, const char *str2)

方法一:

str1:源字符串;

str2:需要查找的目的字符串;

#pragma once
#include<assert.h> const char* My_strstr(const char* str1, const char* str2)
{
assert(nullptr != str1 && nullptr != str2); //断言 //如果目的字符串不是只有\0,走起
if ('\0' != *str2)
{
while ('\0' != *str1)
{
for (int i = 0; *(str1 + i) == *(str2 + i); ++i)
{
if ('\0' == *(str2 + i + 1)) //这里没用后置加加,而是*(str2+i+1)中只是加了一个1
//目的是想知道str2 + i的下一个字符是不是\0
{
return str1;
}
}
++str1;
}
return nullptr;
} //目的字符串是空的
else
{
return str1;
}
} void Test()
{
char a[] = "abcdefgh";
char b[] = "cde";
const char* result = My_strstr(a,b);
}

方法二:

源字符串:str1

目的字符串:str2

const char* My_strstr(const char* str1, const char* str2)
{
assert(nullptr != str1 && nullptr != str2); //断言 for (int i = 0; str1[i] != '\0'; ++i)
{
int temp = i; //记录源字符串的每次的其实位置,有后边改变;
int j = 0;
while (str1[i++] == str2[j++])
{
if (str2[j] == '\0') //这里的j很巧,由于while()中的条件结束,
//j就j++了,所以j是指向下一个的
{
return &str1[temp];
}
}
i = temp; //while 出来,不相等,str1回到相同的几个之前
}
return nullptr;
}

赐教!