strstr也是在字符串函数中比较常见的一个简单函数,其功能是查找一个字符串是不是另一个字符串的子串,我们可以也尝试模拟实现strstr。
首先知道strstr的函数类型和参数
char *strstr( const char *str1, const char *str2 );
下来需要实现:
1.检测字符串的安全性,即是否为空。
2.str1的字符逐个递增,并与str2整串进行比较判断是否相等。相等返回str1;不相等str1++,继续进行比较。
3.如果最后没有找到,返回空值。
代码如下:
char* my_strstr(const char* str1, const char* str2)
{
assert(str1);
assert(str2);
char* cp = (char*)str1;
char* substr = (char*)str2;
if (*substr == '\0')
return NULL; //str2为空时,返回空值。
while (*cp)
{
char* s1 = cp; //s1为每次和str2比较时的指针
(char*)substr = (char*)str2;//每次在str1查找完str2需要指向首地址
while (*s1 && *substr && (*s1 == *substr))
//三种情况退出循环
//1.str1遍历完 2.str2遍历完 3.str1和str2不相等
//当目前str1和str2相等时进入循环
{
s1++; //目前str1的位置指向下一位
substr++; //目前str2的位置指向下一位
}
if (*substr == '\0')
return cp; //当str2可以遍历到最后,证明是str1的子串,返回在str1的首地址
cp++;
}
return NULL;
//当cp指向‘\0’,str1的所有字符被查找之后来到此处,证明没有找到,返回NULL
}