C语言 ——— 学习和使用 strstr 函数,并模拟实现
目录
strstr 函数的作用
学习 strstr 函数编辑
使用 strstr 函数
模拟实现 strstr 函数
strstr 函数的作用
查找子字符串
返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回 null 指针
学习 strstr 函数
函数的参数:
const char* str1:指向字符串的指针,也就是目标字符串,因为不会改变原字符串,所以使用 const 关键字修饰
const char* str2:指向字符串的指针,也就是原头字符串,在目标字符串中找原头字符串
函数的返回值:
const char* :当在 str1 中 找到了 str2 ,那么就返回 str1 找到 str2 的起始位置,否则返回 NULL ,因为同样不会改变原字符串,所以使用 const 修饰
使用 strstr 函数
代码演示:
char str1[] = "abcdefeeefghijk";
char str2[] = "eefghi";printf("%s\n", strstr(str1, str2));
代码验证:
在 str1 中找到了 str2 ,那么就会从 str1 找到 str2 的位置开始返回,并往后打印,直到 '\0'
模拟实现 strstr 函数
代码演示:
char* my_strstr(char* destination, char* source)
{assert(destination);assert(source);char* p = destination;char* s1 = NULL;char* s2 = NULL;while (*p != '\0'){s1 = p;s2 = source;while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2){s1++;s2++;}if (*s2 == '\0')return p;p++;}return NULL;
}
代码解析:
p 指针用来记录匹配开始的位置,利用 s1 和 s2 同时往后走进行匹配
s1 和 s2 匹配不成功时,p 指针就指向下一个位置
s1 和 s2 匹配成功时,s1 和 s2 就同时往后走,当循环结束后,判断 s2 是否走到了 '\0'
走到了 '\0' 就说明匹配成功,返回 p 这个指针,因为 p 是记录匹配开始的位置的
否则一直匹配不成功,直到 p 指针走到 '\0',就返回 NULL
代码验证:
能匹配成功时:
匹配不成功时: