目录
一,strstr函数简介
二,strstr函数实现原理
三,strstr函数的用法
四,strstr函数的注意事项
五,strstr函数的模拟实现
一,strstr函数简介
strstr函数是在一个字符串中查找另一个字符串的第一次出现,并返回该位置的指针,如果找不到,则返回NULL。
🍂函数头文件:
#include <string.h>
🍂函数原型:
const char * strstr ( const char * str1, const char * str2 );
str1:被查找的目标字符串
str2:要查找的对象字符串
二,strstr函数实现原理
strstr函数的实现可以通过遍历字符串的方式来查找str2字符串的出现位置。
1,遍历str1字符串,逐个字符与str2字符串进行比较。
2,如果str1字符串的当前字符与str2字符串的第一个字符相等,则继续比较后续字符。
3,如果str1字符串中的连续字符与str2字符串完全匹配,则返回该位置的指针。
4,如果str1字符串遍历完毕仍未找到匹配,则返回NULL。
三,strstr函数的用法
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "hello world!";
char str2[] = "world!";
char* ret = strstr(str1, str2);
if (ret == NULL)
printf("找不到!\n");
else
printf("%s\n", ret);
return 0;
}
🎈运行结果:
🎈释义:
上述代码中,我们在字符串"hello world!"中查找字符串"world!"的第一次出现,并打印位置。如果找到了,则打印出从第一次找到的那个位置开始后面的所有字符;如果未找到,则打印“找不到”。
四,strstr函数的注意事项
在使用strstr函数时,需要注意以下几点:
1,函数返回的指针指向的是str1字符串中匹配到的位置,因此可以通过指针的偏移量来得到具体的位置。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "hello world!";
char str2[] = "world!";
char* ret = strstr(str1, str2);
if (ret == NULL)
printf("找不到!\n");
else
printf("%d\n", ret - str1);
return 0;
}
🎈运行结果:
🎈释义:
上述代码中,我们在字符串str1中查找字符串str2的第一次出现,并打印位置。如果找到了,则打印出位置的偏移量;如果未找到,则打印“找不到”。
2,如果需要查找字符串的最后一次出现,可以配合使用strstr函数。
3,函数的参数str1和str2都应该是以'\0'结尾的字符串,否则可能会导致不可预料的结果。
五,strstr函数的模拟实现
#include <stdio.h>
#include <string.h>
#include <assert.h>
const char* my_strstr(const char* str1, const char* str2)
{
const char* cp;//记录开始匹配的位置
const char* s1;//遍历str1指向的字符串
const char* s2;//遍历str2指向的字符串
assert(str1 && str2);//处理空指针的情况
if (*str2 == '\0')//如果str2为空字符串,则返回str1
return str1;
cp = str1;
while (*cp)
{
s1 = cp;
s2 = str2;
while (*s1 && *s2 && *s1 == *s2)//在str1中找到str2的第一个字符
{
s1++;
s2++;
}
if (*s2 == '\0')//如果找到了str2的所有字符,则返回该位置的指针
return cp;
cp++;//否则,继续在str1中寻找下一个可能的位置
}
return NULL;//如果未找到匹配的位置,则返回NULL
}
int main()
{
char str1[] = "hello world!";
char str2[] = "world!";
const char* ret = my_strstr(str1, str2);
if (ret == NULL)
printf("找不到!\n");
else
printf("%s\n", ret);
return 0;
}