【c语言】字符串匹配(搜索) | API仿真


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;
}

1

如果没找到:

#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()函数比较效果相同:

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天喜Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值