要正确写出strstr函数,首先必须清楚地认识到这个函数的功能,这个函数用来在一个字符串中找到目标字符串。下面这段代码是我自己写的,不是特别简练,往后还会完善。
好了,我们来讲讲如何实现这个函数。
首先判断目标字符串是否是空字符串,如果是就返回0,如果不是就先求出目标字符串的长度(判断时要用到),这简单,就等于嵌套了一个strlen函数,下来就是遍历字符串来寻找目标字符串,用for循环,条件是 *(msg + i )== *( str + i ),意思是字符串中的字符相等才能进入循环,循环里嵌套 if 语句 !*(str+i+1),条件是如果遍历的这个字符下一个字符等于0(即下一个字符为‘\0’),就结束返回地址,否则就返回NULL.即没有找到。
char* my_strstr(char* msg, const char* str) //找到一个字符串中目标字符串,返回目标字符串的前一位的地址
{
const char* end = str;
int str_len = 0;
int i = 0;
while (*end) //求目标字符串的长度
{
str_len++;
end++;
}
if (str_len == 0) //判断目标字符串是否为空
{
return 0;
}
else
{
while (*msg) //遍历字符串,直至找到目标字符串或遍历完未找到
{
for (i = 0; *(msg + i) == *(str + i); i++)
{
if (!*(str + i + 1))
{
return (char*)msg;
}
}
msg++;
}
return NULL;
}
}
测试程序
int main()
{
char msg[] = "123lov4567love890";
char msg_part[] = "love";
char* ret = my_strstr(msg,msg_part);
printf("%p\n",msg+10); //用来检测
if (ret == 0)
{
printf("未找到");
}
else
{
printf("找到了,%p\n",ret);
}
return 0;
}