strstr
()函数:
strstr
(str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则返回str2在str1中首次出现的地址:否则,返回NULL。
在库函数中
strstr
()函数的原型是
char
*
strstr
(
const
char
* str1,
const
char
* str2 ),包含在头文件<string.h>中。
思路:1.判空及判断str1与str2的长度比较;
2. 从字符串str1和str2开始遍历,直到str2结束,即遇见str2的
'\0'
,寻找成功,返回str1与str2第一个字符相等的首地址,否则,返回NULL;
3.在第二种情况下,在相同几步之后有可能有不相等的情况,如:“12234”与“234”,则将开始的str1++,重复第2步;
4..在这里写代码时需注意的几点:
const
(保证了数据的安全性);
char
*(为了实现链式访问);重复时的处理即第三种情况。相信,细节乃画龙点睛之笔喔!
5.代码:
(1)在库中的代码如下:
char
*
strstr
(
const
char
* str1,
const
char
* str2 )
{
char
*cp = (
char
*) str1;
char
*s1, *s2;
if
( !*str2 )
return
((
char
*)str1);
while
(*cp)
{
s1 = cp;
s2 = (
char
*) str2;
while
( *s1 && *s2 && !(*s1-*s2) )
/*在c语言中指针与指针相减,得到的是元素的个数*/
s1++, s2++;
if
(!*s2)
return
(cp);
cp++;
}
return
(NULL);
}
(2)我的代码:
# include <stdio.h>
char
* my_strstr(
const
char
*s1,
const
char
*s2)
{
int
n=0;
//在开始比较字符相等时走的步数
if
(*s2)
{
while
(*s1)
{
if
(*(s1 + n) == *(s2 + n))
{
if
(*(s2 + n + 1) == NULL)
{
return
(
char
*)s1;
}
n++;
}
/* for (n=0; *(s1 + n) == *(s2 + n); n++)
{
if (*(s2 + n + 1)==NULL)
return (char *)s1;
} */
s1++;
//只要第n次不相等时,就进行s1++,直到满足条件时开始返回执行循环语句
}
return
NULL;
}
else
return
NULL;