C语言字符串查找:深入理解 strstr 函数
在 C 语言中字符串处理是日常开发中非常常见的操作。无论是搜索文本、解析输入还是处理文件内容都离不开对字符串的查找操作。而在标准库中strstr函数提供了一种简洁高效的方式来查找子串。本文将深入分析strstr的用法、原理以及注意事项。1.strstr的基本用法strstr函数定义在string.h头文件中其原型如下char *strstr(const char *haystack, const char *needle);haystack目标字符串即要搜索的“主串”。needle子串即要查找的内容。函数返回值返回一个指针指向haystack中第一次出现needle的位置如果needle不存在于haystack中则返回NULL示例#include stdio.h #include string.h int main() { char *text Hello, C programming!; char *sub C prog; char *pos strstr(text, sub); if (pos ! NULL) { printf(找到了子串位置: %ld\n, pos - text); } else { printf(未找到子串\n); } return 0; }输出找到了子串位置: 7可以看到strstr返回了子串在主串中第一次出现的位置。2.strstr的匹配特点连续匹配strstr只匹配连续的字符序列。例如char *text 刑天铠甲; char *sub 刑甲; if (strstr(text, sub)) { printf(匹配成功\n); } else { printf(匹配失败\n); }输出匹配失败原因刑甲在刑天铠甲中不是连续的子串中间有天所以strstr无法匹配。大小写敏感默认情况下strstr是大小写敏感的。搜索C与c是不同的字符。空子串如果needle是空字符串则strstr返回haystack的指针即匹配成功。3. 常见问题与替代方案在实际开发中我们经常遇到类似刑天铠甲与刑甲的模糊匹配需求。strstr无法处理这种非连续子串匹配。这时可以用以下方法方法 A包含所有字符判断子串中每个字符是否都出现在主串中#include stdio.h #include string.h #include stdbool.h bool containsAllChars(const char *str, const char *sub) { while (*sub) { if (strchr(str, *sub) NULL) return false; sub; } return true; } int main() { char *text 刑天铠甲; char *sub 刑甲; if (containsAllChars(text, sub)) printf(匹配成功\n); else printf(匹配失败\n); }输出匹配成功方法 B顺序字符匹配Subsequence允许子串字符在主串中间隔开但顺序不变bool isSubsequence(const char *str, const char *sub) { while (*str *sub) { if (*str *sub) sub; // 如果主串当前字符等于子串当前字符子串指针向后移动 str; // 主串指针一直向后移动 } return *sub \0; // 子串遍历完了说明是子序列 }这个方法可以在做模糊搜索、关键词匹配时非常方便。4. 总结strstr是 C 标准库提供的简单高效的连续子串查找函数它匹配的是连续、大小写敏感的子串对于模糊匹配或非连续匹配strstr无法满足需要自己实现逻辑如包含字符或顺序子序列匹配在实际开发中理解strstr的局限性并根据需求选择合适的匹配算法可以让字符串搜索既高效又灵活。

相关新闻

SAP财务人必看:SQ01报表+Table组合查询的5个高阶技巧

SAP财务人必看:SQ01报表+Table组合查询的5个高阶技巧

SAP财务数据深度挖掘:SQ01与Table联动的五大实战场景解析 如果你已经熟悉了SAP Query(SQ01)的基本操作,能够拖拽字段、设置筛选条件,生成一些常规的明细账或余额表,那么恭喜你,你已经迈出了高效…

2026/7/3 0:56:05 阅读更多 →
V4L2_MEMORY_MMAP模式详解:为什么它比read()更快?

V4L2_MEMORY_MMAP模式详解:为什么它比read()更快?

V4L2_MEMORY_MMAP模式详解:为什么它比read()更快? 如果你在Linux下做过摄像头应用开发,尤其是对性能有要求的实时视频处理项目,大概率会碰到一个选择:是用传统的read()系统调用一帧一帧地读数据,还是用那个…

2026/5/17 8:05:47 阅读更多 →
电源接口EMC设计实战:从电路拓扑到PCB布局的防护与滤波

电源接口EMC设计实战:从电路拓扑到PCB布局的防护与滤波

1. 电源接口EMC:为什么你的产品总在测试中“翻车”? 做硬件开发的朋友,估计没少在实验室里“渡劫”。尤其是电源接口的EMC(电磁兼容性)测试,传导骚扰、辐射骚扰、雷击浪涌、静电放电……每一项都像是一道坎…

2026/5/17 12:34:40 阅读更多 →

最新新闻

从零构建AI游戏助手:基于深度学习的实时目标识别与自动瞄准方案

从零构建AI游戏助手:基于深度学习的实时目标识别与自动瞄准方案

从零构建AI游戏助手:基于深度学习的实时目标识别与自动瞄准方案 【免费下载链接】AIAssist GameAssist是一个AI游戏助手,结合OpenCv、OpenCvSharp4、ssd_mobilenet_v3等技术,对游戏对象进行识别,支持自动瞄准/自动开枪等功能&…

2026/7/3 21:17:34 阅读更多 →
浅析正则表达式—(原理篇)

浅析正则表达式—(原理篇)

其实这篇文章很久之前就应该发出来,由于种种原因没有发出来,如果这篇文章中有错误,还请大家指出,小弟并改正之,没有学不会的东西,只有不想学的东西,只要功夫深,铁杵磨成针&#xff0…

2026/7/3 21:15:33 阅读更多 →
当你在深夜想保存那个在线课程时:一个M3U8下载器的故事

当你在深夜想保存那个在线课程时:一个M3U8下载器的故事

当你在深夜想保存那个在线课程时:一个M3U8下载器的故事 【免费下载链接】m3u8-downloader 一个M3U8 视频下载(M3U8 downloader)工具。跨平台: 提供windows、linux、mac三大平台可执行文件,方便直接使用。 项目地址: https://gitcode.com/gh_mirrors/m3u8d/m3u8-d…

2026/7/3 21:13:33 阅读更多 →
TwitchNoSub:解锁Twitch订阅专属内容的完整指南

TwitchNoSub:解锁Twitch订阅专属内容的完整指南

TwitchNoSub:解锁Twitch订阅专属内容的完整指南 【免费下载链接】TwitchNoSub An extension to watch sub only VOD on Twitch 项目地址: https://gitcode.com/gh_mirrors/tw/TwitchNoSub 你是否曾经在Twitch上发现一个精彩的直播回放,却因为&quo…

2026/7/3 21:13:33 阅读更多 →
PyTorch模型性能优化实战:从数据加载到部署

PyTorch模型性能优化实战:从数据加载到部署

1. PyTorch模型性能优化全景解析在深度学习项目实践中,模型性能优化是每个从业者必须掌握的硬核技能。最近接手的一个工业级图像分类项目让我深刻体会到:当数据集规模达到千万级,即使使用RTX 4090这样的顶级显卡,未经优化的PyTorc…

2026/7/3 21:05:29 阅读更多 →
MuleSoft企业级AI编排:让大模型听懂ERP与CRM

MuleSoft企业级AI编排:让大模型听懂ERP与CRM

1. 项目概述:当企业级集成平台遇上大语言模型,不是叠加,而是重定义工作流“AI Orchestration in Action: How MuleSoft and LLMs Fuel the Future of Enterprise AI”——这个标题里藏着一个正在发生的、静默却剧烈的范式转移。它说的不是“用…

2026/7/3 21:05:29 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻