strstr
char * strstr ( char * str1, const char * str2 );
返回指向 str2 中第一次出现的 str1 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。
参数
str1
要扫描的 C 字符串。
str2
包含要匹配的字符序列的 C 字符串。
返回值
指向 str1 中指定的整个字符序列在 str2 中首次出现的指针,如果序列在 str1 中不存在,则为 null 指针。
例:
#include <stdio.h>
#include <assert.h>
int main() {
char arr1[] = "abbbcbbcd";
char arr2[] = "bbc";
char* ret=strstr(arr1, arr2);
if (ret == NULL) {
printf("没找到。");
}
else {
printf("找到了:%s\n", ret);
}
return 0;
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/ed560891aa3bcd09cc110820ecf5eb89.jpeg)
实现strstr函数
#include <stdio.h>
#include <assert.h>
char* my_strstr(const char* str1, char* str2) {
assert(str1&&str2);
const char* cp = str1;//记录第一个匹配的字符
const char* s1 = NULL;
const char* s2 = NULL;
if (*str2 == '\0') {
return (char*)str1;
}
while (*cp) {
s1 = cp;
s2 = str2;
while (*s1 && *s2 && (*s1 == *s2)) {//比较两个字符是否相同
s1++;
s2++;
}
if (*s2 == '\0') {
return (char*)cp;
}
cp++;
}
return NULL;
}
int main() {
char arr1[] = "abbbcbbcd";
char arr2[] = "bbc";
char* ret=my_strstr(arr1, arr2);
if (ret == NULL) {
printf("没找到。");
}
else {
printf("找到了:%s\n", ret);
}
return 0;
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/eb86181ea0c4b77943017a8c9699d059.jpeg)