目录
1. 头文件
#include<string.h>
2. 怎么使用
str str全称 string string 字符串字符串
strstr函数的使用就是,传入两个参数。第一个参数作为总参数,第二个参数是查找参数。
在第一个参数中查找和 第二个参数相同的位置。最后在返回相同 开始的位置。
例如 字符串 yangjianglong 和 字符串 jiang 最后返回的就是 指向 j 的 地址。
如果打印出来后就变为了 jianglong 。
3.模拟实现
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) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
代码解析。因为两个参数并未做更改所以要用const 保护起来防止更改。
先用 一个 cp指针 来装入 str1 的初始位置。
在创建两个指针 s1,s2.
本题里的!的用法是,真假转换。如果为0则转换为1,如果是1就转为 0 的意思
第一个if 语句的意思是当 *str2 为 0 时进入循环,为真的话就跳过if 语句。这是为了防止传入一个空字符进来。如果传入空字符的话那就返回 str1 的首地址。
while 循环的意思 括号表达式 是 *cp 是 如果 * cp 为‘\0 ’的话跳出循环。
s1 = cp s2 = (char*)str2,
第二个while循环的意思是 *s1 和 *s2 不为 0 和 *s1 - *s2 为0时进入循环。是因为这时出现了str1和str2相同的第一个地方,循环内s1和s2的的位置++。下面的if 语句 表示 如果此时
*s2 为 0 的话就返回 cp。
如果在*s2还没为 ‘\0’ 时循环就结束,就是像 yyangjianglong 和 yang 字符串,因为第一个字符串前面有两个y 函数会从 出现 第一个 y 开始检视,发现第二个字符不同时就跳出了循环。
之后cp++ 让cp的地址+1,在进行检视,这时 第一个字符串就变为了 yangjianglong ,然后检视后发现 *s2 已经变为 ‘\0’ 就是 4个字符都相同时。此时 就返回cp 即 yyangjianglong 中
yangjianglong 开始的地址,即yyangjianglong的第二个元素的地址。
如果在整个字符串中都没找到符号的字符串,那最终返回一个空指针