当前位置: 首页 > article >正文

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


c语言系列专栏:c语言之路重点知识整合

字符串知识点:字符串基本概念、存储原理


字符串匹配 目录

  • 一、字符串匹配
  • 二、strstr仿真
    • 声明:
    • 指针方式定义:
    • 调用测试:
    • 运行结果:

一、字符串匹配

字符串匹配是对一个字符串进行搜索匹配另一个字符串

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

在这里插入图片描述

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

http://www.kler.cn/news/17661.html

相关文章:

  • Nginx快速入门
  • I.MX6Q-SDB开发板移植ubuntu
  • MySQL5.7和MySQL8.0的区别是什么
  • 华为OD机试 - 优选核酸检测点(Python)
  • 操作系统(2.7)--进程
  • DAY 55 mysql数据库管理
  • 计算机专业还有前途吗?从业9年的程序员告诉你优缺点
  • MySQL知识学习04(MySQL事务隔离级别详解)
  • Elasticsearch --- 数据同步、集群
  • APP渗透—MobSF安全评估、frida、r0capture抓包
  • 倒排索引(Inverted Index)
  • Unity——Mirror学习(01)
  • c#笔记-运算符
  • 网卡丢失导致集群异常
  • Linux日志文件处理
  • 程序员找工作难吗?我用亲身经历来告诉大家
  • 基于哈希表的用户管理系统
  • 操作系统——存储管理方式
  • Python机器学习入门 -- 支持向量机学习笔记
  • 基于改进的离散PSO算法的FJSP的研究(Python代码实现)
  • 优秀的B树(B-Tree)文章索引
  • C++类的静态成员详解:成员函数非静态成员函数的非法调用
  • Java 版 spring cloud 工程系统管理 +二次开发 工程项目管理系统源码
  • axios使用笔记
  • 【五一创作】网络协议与攻击模拟-01-wireshark使用-捕获过滤器
  • 【学习笔记】「JOISC 2022 Day1」错误拼写
  • git 撤销add/commit,以及更换源命令
  • Unity VFX -- (4)创建burst粒子效果
  • 图片损坏修复软件,分享好用靠谱的软件
  • 基于海洋捕食者算法的极限学习机(ELM)回归预测-附代码