strstr函数是用来判断字符串1中的是否存在子字符串和字符串2相等,如果存在返回字符串1中子字符串首字符的地址,如果不存在则返回NULL。
例如:
- str1[] = “abcdefg”;
str2[] = “def”;
strstr(str1, str2);
它的返回值就是 str1 中 d 的地址。
明白了它的用法,我们就可以来实现 strstr 函数。
首先我们的思路就是连续对 str1 中的字符和 str2 进行对比,如果相同,则继续往后比较,如果不同则比较 str1 中以下一个字符为首的子字符串看是是否相等。
下面来实现 strstr 函数,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
const char* my_strstr(const char* str1, const char* str2) { //我们只是进行查找,不进行修改,所以使用 const 进行修饰
assert(str1 != NULL && str2 != NULL);//使用断言来判断地址是否合法
const char* start = str1;
const char* tmp = str2;
const char* check = start;
while (*start) {
check = start;//标记每次开始查找的地址
//这个循环是进行字符串1的子字符串和字符串2进行比较
while (*check == *tmp && *check != '\0' && *tmp != '\0') {
check++;
tmp++;
}
if (*tmp == '\0') {
return start;
}
start++;
tmp = str2;
}
return NULL;
}
int main() {
char str1[] = "abcccdef";
char str2[] = "ccd";
printf("%s\n", my_strstr(str1, str2));
return 0;
}