strstr()是string.h库里的一个函数,它的效果是传两个字符串地址,在第一个字符串中找第二个字符串。如果存在返回存在第一个字符串中关于第二个字符串的首地址。如果不存在,就返回空指针。
首先需要定义三个指针,s1,s2,p。因为两个字符串不能改变,需要重新定义三个指针来实现,当找到一半或者找到其中几个字符时,需要一个p指针来记录第一个字符串中开始比较的起始位置,下一次遍历时,将p+1赋给s1再一次进行对比,直到全部遍历完第一个字符串,亦或者找到了子字符串。找到时,此时s2指向\0,只需加一个条件,直接结束循环,直接返回p的地址就是所查找子字符串在第一个字符串的起始位置。
代码实现如下:
#include <stdio.h>
#include <string.h>
#include <assert.h>char* my_strstr(const char* str1, const char* str2) {assert(str1 && str2);const char* s1 = str1;const char* s2 = str2;const char* p = str1;while (*p) {s1 = p;s2 = str2;while(*s2!='\0'&&*s1!='\0' &&* s1 == *s2) {s1++;s2++;}if (*s2 == '\0') {return p;}p++;}return NULL;}
int main() {char arr1[] = "abbbcdef";char arr2[] = "bcd";char*ret=my_strstr(arr1, arr2);if (ret == NULL) {printf("没找到\n");}else {printf("%s\n", ret);}return 0;
}