strstr的使用和模拟实现

目录

1. 头文件

2. 怎么使用

3.模拟实现


1. 头文件

#include

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的第二个元素的地址。

如果在整个字符串中都没找到符号的字符串,那最终返回一个空指针

你可能感兴趣的:(c语言,c语言,c++,开发语言)