c语言系列专栏:c语言之路重点知识整合
字符串知识点:字符串基本概念、存储原理
一、字符串匹配
字符串匹配是对一个字符串进行搜索匹配另一个字符串
搜索str1字符串中是否有与str2匹配的短字符串
标准库函数strstr():

使用:
#include <stdio.h>
#include <string.h>
int main()
{
/*
字符串匹配函数 strstr()
搜索字符串在另一个字符串中首次出现的位置。
*/
char longStr[] = "TianXi Studio";
/*strstr*/
char* p = strstr(longStr, "Studio");
printf("%c\n", *p);
printf("%s\n", p);
//下标
printf("匹配的下标:%d\n", p - longStr);
return 0;
}

如果没找到:
#include <stdio.h>
#include <string.h>
int main()
{
/*
字符串匹配函数 strstr()
搜索字符串在另一个字符串中首次出现的位置。
*/
char longStr[] = "TianXi Studio";
/*strstr*/
char* p = strstr(longStr, "Studio");
//没找到
p = strstr(longStr, "Coding");//返回NULL:没找到
printf("%d %s\n", p, p); //以整数输出、以字符串输出
return 0;
}

二、strstr仿真
字符串常用于文字处理,常用且实用。因此其常用功能被封装成了一套API。可通过string.h进行使用。
通过仿真我们可以理解其函数内部工作机制的细节
定义一个my_strstr()函数,模仿strstr函数搜索字符串
不使用标准函数strstr匹配,使用自己定义的my_strstr函数
声明:
char* my_strstr(const char* str1, const char* str2);
指针方式定义:
char* my_strstr(const char* str1, const char* str2)
{
const char* p = str1;
const char* q = str2;
while (*p)
{
if (*q == *p)
{
q++; //遍历q与p比较
p++;
if (*q == '\0')
{
return p - strlen(str2);//地址差
}
}
else
{
q = str2;
p++;
}
}
return NULL;
}
调用测试:
#include <stdio.h>
#include <string.h>
char* my_strstr(const char* str1, const char* str2);
int main()
{
/*
字符串匹配函数 strstr()
搜索字符串在另一个字符串中首次出现的位置。
*/
char longStr[] = "TianXi Studio";
/*strstr*/
// char* p = strstr(longStr, "Studio");
//printf("%c\n", *p);
// printf("%s\n", p);
//下标
// printf("匹配的下标:%d\n", p - longStr);
//没找到
//p = strstr(longStr, "Coding");//返回NULL:没找到
// printf("%d %s\n", p, p); //以整数输出、以字符串输出
/*仿真字符串匹配函数 strstr */
char* p = my_strstr(longStr, "Studio");
printf("%c\n", *p);
printf("%s\n", p);
//下标
printf("匹配的下标:%d\n", p - longStr);
//没找到
p = my_strstr(longStr, "Coding");//返回NULL:没找到
// printf("%d %s\n", p, p); //以整数输出、以字符串输出
return 0;
}
运行结果:
与原先的strstr()函数比较效果相同:

| 大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
| 大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容! |
C语言实践:探索字符串匹配函数strstr及其自定义实现
本文介绍了C语言中的字符串匹配函数strstr的使用方法,并通过示例代码展示了如何寻找一个字符串在另一个字符串中首次出现的位置。同时,文章还提供了自定义函数my_strstr的实现,以加深对字符串匹配机制的理解。通过测试,my_strstr函数能获得与strstr相同的效果。
1万+





