函数字面理解记忆:strstr前面的表示属于<string.h>头文件里面处理字符串的函数;后面的str表示要找到对应的string字符串。
函数的返回值和传入值:char* strstr(char* arr,char* brr ); arr表示被找的字符串首地址,brr表示要在arr中找到brr。如果找到了就返回其第一个字符的地址,如果没有找到就返回NULL空指针。
strstr函数自我实现:
char* my_strstr(char* arr, char* brr) {
int lenarr = strlen(arr);
int lenbrr = strlen(brr); //这里的两行是取两个字符串的长度
if (lenarr<lenbrr )return NULL; //这里是保证我们找的字符串要小于被找的字符串
if (arr == NULL || brr == NULL)return NULL; //这里是保证两个字符串不是空
char* line = arr; //这里是一个一直往arr后走的指针
while (lenarr -(line-arr) >= lenbrr) { //外层函数的判断条件是我们line停留的地方到arr末尾 的长度要大于或者等于brr的长度。运用到了指针的加减法
if (strncmp(line, brr, lenbrr) == 0)return line; //这里是以每个line为起始点,用库函数里面 的strcmp函数来判断定向长度下两个字符 串是否相等,也可以自己写这个函数。
else {
line++; //如果不满足就以下一个字符串为基点通过为下一次外部循环做准备
continue;
}
}
if (arr - line < lenbrr)return NULL; 如果找完了还没有,那么就是没有,返回NULL
return 0;
}
另外:这个找字符串的算法有更高阶的。我们这个算法的时间复杂度是O(n²),大家可以自行查找KMP算法。比较难理解,作者还没有看,后面会了会补上来这种方法。