一:strstr函数的定义:
strstr函数功能的解释:
在一个字符串里面寻找另一个字符串的首次出现位置,返回值为该位置。
strstr函数要点:
1,如果 str2
是 str1
的一部分,它返回一个指向 str1
中 str2
首次出现位置的指针。如果 str2
不是 str1
的一部分,它返回 NULL
。
2,strstr
只查找字符串中的字符,不包括终止的空字符。
二:strstr函数的演示:
返回为arr1中的 第二个c的首地址,所以打印为cdd。
三:strstr的模拟实现:(成功找到字符串)
理解要点:
1,函数内部参数的设置(3个指针)
我们比较的时候,不能拿str1和str2去移动遍历比较字符,因为如果比较成功我们要返回的值为str1
中 str2
首次出现位置的指针。直接去拿str1移动,我们无法返回首次在str1中出现str2位置的指针。
所以我们要将str1和str2分别赋给一个新的字符指针,如图中的cp和s2,然后再将cp赋给s1,因为我们遍历比较的过程中,str1需要一个指针去遍历比较(s1),一个指针去指向某个可能首次出现str2位置(cp)。
2, 比较的几种情况:
第一种:两个字符串第一个就不同(第一次比较肯定是b和c的比较,b不等于c,所以没有比较下去的必要。)
第二种:两个字符串第一个相同,但是之后出现了不同(第一个字符串中的第一个c和第二个字符串ccdd中的第一个c相等,我们要继续比较下一个,但是当我们没比较完ccdd的时候,就已经不吻合了。)
3,返回的几种情况:
第一种:当我们比较完成并且吻合的时候,我们返回的是 str1
中 str2
首次出现位置的指针 cp
第二种:当我们失败的时候我们会让cp的位置向后移动,再进行比较。
4,不同 while 和 if 的判断条件的解释:
第一个:总体while (*cp)
因为比较的过程中str1中的cp会因为比较的结果(比较不吻合)向后移动,当cp移动到最后一个字符'\0'的时候,也就代表再也在str1中找不到str2了,所以退出循环。
第二个:while (*s1 && *s2 && *s1 == *s2)
还有可能比较成功的时候,便有可能进入第二个while,当两个字符串对应的字符相等,且都不为'\0'的时候,就进行下一步比较。
第三个:if (*s2 =='\0')
来到该if语句有两种可能 :
a:还有可能比较成功的时候,但又没有进入到第二个while中的时候。
b:还有可能比较成功的时候,从while执行完成出来的时候
解释:如果*s2为'\0'的时候,就代表已经在str1中找到了str2,因为不把s2的全部字符遍历完,不可能来到s2的'\0'。而如果*s2不为'\0'则代表,第二个while压根没进,或者进了但是遍历过程中出现了不同。
四:strstr的模拟实现:(没有找到字符串)