嵌入式Linux系统编程 — 4.5 strcmp、strchr 等函数实现字符串比较与查找

目录

1 字符串比较

1.1 strcmp() 函数

1.2 strncmp() 函数

1.3 示例程序

2 字符串查找 

2.1 strchr() 函数

2.2 strrchr() 函数

2.3 strstr() 函数

2.4 strpbrk() 函数

2.5 示例程序


1 字符串比较

strcmp()strncmp() 函数是C语言标准库中用于比较两个字符串的函数。

1.1 strcmp() 函数

strcmp 进行字符串比较,主要是通过比较字符串中的字符对应的 ASCII 码值, strcmp 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现了不同的字符,或者某一字符串已经到达末尾(遇见了字符串结束字符' \0 ')。函数原型如下:

#include <string.h>int strcmp(const char *str1, const char *str2);

参数:两个字符串 str1str2 

1.2 strncmp() 函数

strncmp()与 strcmp()函数一样,也用于对字符串进行比较操作,但最多比较前 n 个字符, strncmp()函数原型如下所示:

int strncmp(const char *str1, const char *str2, size_t n);

 参数:两个字符串 str1str2 

这两个函数都接受指针作为参数,指向要比较的字符串。strcmp() 比较两个完整的字符串,而 strncmp() 只比较每个字符串的前 n 个字符。两个函数的返回值如下:

  • 返回 0 如果两个字符串相等。
  • 返回小于 0 的值如果第一个字符串在字典序上小于第二个字符串。
  • 返回大于 0 的值如果第一个字符串在字典序上大于第二个字符串。

1.3 示例程序

下面的示例程序使用 strcmp()strncmp() 函数来比较两个用户输入的字符串。

#include <stdio.h>
#include <string.h>#define MAX_STR_LEN 100 // 定义字符串的最大长度int main() 
{char str1[MAX_STR_LEN], str2[MAX_STR_LEN]; // 存储用户输入的两个字符串int n; // 存储用户输入的参数n,用于strncmp()比较的字符数// 获取用户输入的第一个字符串printf("请输入第一个字符串:");fgets(str1, MAX_STR_LEN, stdin);str1[strcspn(str1, "\n")] = 0; // 去除末尾的换行符// 获取用户输入的第二个字符串printf("请输入第二个字符串:");fgets(str2, MAX_STR_LEN, stdin);str2[strcspn(str2, "\n")] = 0; // 去除末尾的换行符// 获取用户输入的参数nprintf("请输入要比较的字符数n:");scanf("%d", &n);// 确保n不会超过字符串的最大长度n = n > MAX_STR_LEN ? MAX_STR_LEN : n;// 使用strcmp()函数比较两个完整字符串int strcmp_result = strcmp(str1, str2);printf("使用strcmp()比较两个完整字符串的结果:");if (strcmp_result == 0) {printf("两个字符串相等。\n");} else if (strcmp_result < 0) {printf("第一个字符串小于第二个字符串。\n");} else {printf("第一个字符串大于第二个字符串。\n");}// 使用strncmp()函数比较两个字符串的前n个字符int strncmp_result = strncmp(str1, str2, n);printf("使用strncmp()比较两个字符串的前%d个字符的结果:", n);if (strncmp_result == 0) {printf("两个字符串的前%d个字符相等。\n", n);} else if (strncmp_result < 0) {printf("第一个字符串的前%d个字符小于第二个字符串的前%d个字符。\n", n, n);} else {printf("第一个字符串的前%d个字符大于第二个字符串的前%d个字符。\n", n, n);}return 0;
}

程序首先使用 strcmp() 对两个完整字符串进行比较,然后使用 strncmp() 对两个字符串的前 n 个字符进行比较。运行结果如下:

2 字符串查找 

字符串查找在平时的编程当中也是一种很常见的操作,譬如从一个给定的字符串当中查找某一个字符或者一个字符串,并获取它的位置。 C 语言函数库中也提供了一些用于字符串查找的函数,包括 strchr()、strrchr()、 strstr()、 strpbrk()、 index()以及 rindex()等。下面是每个函数的作用和原型:

index()rindex()已被标准化的新函数取代,并且可能在某些编译器中不可用或在未来的C标准中被移除。

2.1 strchr() 函数

strchr() 函数在字符串中查找第一次出现指定字符的位置。函数原型如下:

#include <string.h>char *strchr(const char *s, int c);
  • s:要搜索的字符串。
  • c:要查找的字符。

2.2 strrchr() 函数

strrchr() 函数从字符串末尾开始查找最后一次出现指定字符的位置,参数和返回值与 strchr() 相同,但是搜索方向是从末尾到开头。。函数原型如下:

#include <string.h>char *strrchr(const char *s, int c);

  • s:要搜索的字符串。
  • c:要查找的字符

2.3 strstr() 函数

strstr() 函数在字符串中查找第一次出现子字符串的位置。函数原型:

char *strstr(const char *haystack, const char *needle);
  • haystack:要搜索的字符串。
  • needle:要查找的子字符串。

2.4 strpbrk() 函数

strpbrk() 函数在字符串中查找任意字符在另一字符串中首次出现的位置。函数原型如下:

char *strpbrk(const char *s1, const char *s2);
  • s1:要搜索的字符串。
  • s2:包含要查找的字符集的字符串。

2.5 示例程序

下面的示例程序使用 strchr()strrchr()strstr()strpbrk() 函数来查找字符或子字符串,并使用条件语句检查是否找到了它们。如果找到了,我们计算字符或子字符串的位置,并打印出来。

#include <stdio.h>
#include <string.h>#define MAX_STR_LEN 100int main() {char str[MAX_STR_LEN]; // 用户输入的源字符串char charToFind; // 用户希望查找的字符char substr[MAX_STR_LEN]; // 用户希望查找的子字符串char charsToBreak[MAX_STR_LEN]; // 用户希望用于strpbrk的字符集// 初始化字符串memset(str, 0, MAX_STR_LEN);memset(substr, 0, MAX_STR_LEN);memset(charsToBreak, 0, MAX_STR_LEN);// 获取用户输入的源字符串printf("请输入源字符串:");fgets(str, MAX_STR_LEN, stdin);str[strcspn(str, "\n")] = 0; // 去除末尾的换行符// 获取用户希望查找的字符printf("请输入要查找的字符:");scanf("%c", &charToFind);scanf("%*c"); // 清除缓冲区中的换行符// 获取用户希望查找的子字符串printf("请输入要查找的子字符串:");fgets(substr, MAX_STR_LEN, stdin);substr[strcspn(substr, "\n")] = 0; // 去除末尾的换行符// 获取用户希望用于strpbrk的字符集printf("请输入用于strpbrk的字符集(例如: 'abc123'):");fgets(charsToBreak, MAX_STR_LEN, stdin);charsToBreak[strcspn(charsToBreak, "\n")] = 0; // 去除末尾的换行符// 使用strchr查找字符char *chrPos = strchr(str, charToFind);printf("strchr找到的位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 输出字符在字符串中的位置}// 使用strrchr从末尾查找字符chrPos = strrchr(str, charToFind);printf("strrchr找到的位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 输出字符在字符串中的位置}// 使用strstr查找子字符串chrPos = strstr(str, substr);printf("strstr找到的子字符串位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 输出子字符串在字符串中的位置}// 使用strpbrk查找任意字符在字符集中首次出现的位置chrPos = strpbrk(str, charsToBreak);printf("strpbrk找到的位置:%s\n", chrPos ? "找到" : "未找到");if (chrPos) {printf("位置:%zu\n", chrPos - str + 1); // 输出字符在字符串中的位置}return 0;
}

函数运行结果如下: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典排序算法详解

目录 创作不易&#xff0c;如对您有帮助&#xff0c;还望一键三连&#xff0c;谢谢&#xff01; 前言 学习目标&#xff1a; 直接插入排序 基本思想&#xff1a; 代码 希尔排序&#xff1a; gap取值 代码 特性总结 选择排序 基本思想 代码 堆排序 思想 代码 冒…

[CTF]-PWN:mips反汇编工具,ida插件retdec的安装

IDA是没有办法直接按F5来反汇编mips的汇编的&#xff0c;而较为复杂的函数直接看汇编不太现实&#xff0c;所以只能借用插件来反汇编 先配置环境&#xff0c;下载python3.4以上的版本&#xff0c;并将其加入到环境变量中 下载retdec 地址&#xff1a;Release v1.0-ida80 ava…

Unity关于Addressables.Release释放资源内存问题

前言 最近在编写基于Addressables的资源管理器&#xff0c;对于资源释放模块配合MemoryProfiler进行了测试&#xff0c;下面总结下测试Addressables.Release的结论。 总结 使用Addressables.Release释放资源时&#xff0c;通过MemoryProfiler检查内存信息发现加载的内容还在…

一文让你简单明了的知道云管理平台的作用

随着云计算的飞速发展&#xff0c;越来越多的企业实现了上云。因此云管理平台也在云计算环境中扮演着至关重要的角色&#xff0c;在企业上云后充分发挥作用。今天我们小编就来为大家简单讲解一下云管平台的作用。 一文让你简单明了的知道云管理平台的作用 作用1、提高工作效率…

思考-生涯思考-GPT-5对人们的影响

GPT-5 一年半后发布&#xff1f;对此你有何期待&#xff1f; IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&#xff0c;给出了肯定答案并表示将在一年半后发布。此外&#xff0c;…

20240629 每日AI必读资讯

&#x1f680; Google 深夜突袭&#xff0c;Gemma 2 狂卷 Llama 3 - Gemma2性能超越Llama3&#xff0c;提供9B和27B版本&#xff0c;性能接近70B模型但大小仅为其40% - Gemma2支持高效推理&#xff0c;单个GPU即可实现全精度推理&#xff0c;广泛的硬件支持 - Gemma2兼容多种…

2024年618各城市跨境电商战况如何?

2024年618各城市 跨境电商战况如何? 2024 城市“618”跨境战绩&#xff08;部分&#xff09; 2024年“618”期间&#xff0c;全国跨境电商交易额实现2,397.12亿元&#xff0c;同比增长8.68%。从跨境商品来看&#xff0c;进口端&#xff0c;婴童食品、美容美妆、营养保健等商…

[深度学习] 前馈神经网络

前馈神经网络&#xff08;Feedforward Neural Network, FFNN&#xff09;是人工神经网络中最基本的类型&#xff0c;也是许多复杂神经网络的基础。它包括一个输入层、一个或多个隐藏层和一个输出层。以下是详细介绍&#xff1a; 1. 结构 1. 输入层&#xff08;Input Layer&am…

基于改进天鹰优化算法(IAO)优化支持向量机(SVM)数据分类预测(IAO-SVM)

改进天鹰优化算法(IAO)见&#xff1a;【智能优化算法】改进的AO算法(IAO)-CSDN博客 支持向量机(SVM)数据分类预测&#xff1a;基于支持向量机(SVM)的数据分类预测-CSDN博客 代码原理 基于改进天鹰优化算法&#xff08;IAO&#xff09;优化支持向量机&#xff08;SVM&#xf…

uniapp获取证书秘钥、Android App备案获取公钥、签名MD5值

一、 uniapp获取证书秘钥 打开uniapp开发者中心下载证书打开cmd输入以下这段代码&#xff0c;下载提供查看到的密钥证书密码就可以了&#xff01;下载证书在 java 环境下运行才可以 // your_alias 换成 证书详情中的别名&#xff0c;your_keystore.keystore 改成自己的证书文件…

Splashtop 的屏幕录制功能如何提高 IT 合规性

在当今的数字时代&#xff0c;随着远程办公的普及以及监管要求和网络安全威胁的加剧&#xff0c;IT 副总裁、首席信息官&#xff08;CIO&#xff09;等 IT 管理人员面临着一系列独特挑战。 各组织在远程支持运营中要全力维护合规性、提高安全性并坚持问责制&#xff0c;技术解…

汉江师范学院2024年成人高等继续教育招生简章

汉江师范学院&#xff0c;这所承载着深厚文化底蕴和学术积淀的高等学府&#xff0c;即将在2024年迎来新一季的成人高等继续教育招生。这不仅是一次知识的盛宴&#xff0c;更是对每一位怀揣梦想、追求进步的成年人的诚挚邀请。 汉江师范学院&#xff0c;以其严谨的教学态度、卓…

关于数据库的ACID几点

首先的话就是关于ACID&#xff0c;最重要的就是原子性了&#xff0c;这是基础。 原子性是指事务包含的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成。如果不能保证原子性&#xff0c;可能会出现以下问题&#xff1a; 数据不一致&#xff1a;事务中的部分操作…

AI基础:从线性回归到梯度下降

一个简单的问题&#xff1a; 如果此时你正站在迷路缭绕的山坡上&#xff0c;能见度不高&#xff0c;但是你又想去往最低的山谷的位置&#xff0c;怎么走&#xff1f; 很简单&#xff0c;哪里陡那就往那里走呗——而这就是梯度下降算法的思想。 古话说&#xff1a;“先发制于人…

java基于ssm+jsp 电子商城系统

1管理员功能模块 管理员登录&#xff0c;通过填写用户名、密码进行登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入电子商城系统可以查看个人中心、用户管理、医生管理、药品信息管理、线上诊疗管理、医生信息管理、管理员管理、论坛管理、系统管理、订单管…

行业推荐!IG5216量产工具下载,IG5216开卡软件分享

国内固态硬盘常用&#xff0c;且有量产工具流传出来的主控厂商包括慧荣、群联、点序、英韧、得一微、瑞昱、联芸、迈威、国科、华澜微等等。 每个主控需要用各自对应的量产工具&#xff0c;不同的量产工具支持的闪存颗粒也有差异&#xff0c;因此要根据固态硬盘实际的主控型号…

气膜建筑审批流程及现状分析—轻空间

气膜建筑作为一种新兴的建筑形式&#xff0c;以其快速建造、成本低廉和灵活多变的优势在各个领域得到了广泛应用。然而&#xff0c;气膜建筑在我国尚未被纳入正式的建筑规范&#xff0c;这使得其审批流程与传统建筑有显著差异。轻空间将详细探讨气膜建筑的审批流程及其在实际操…

MongoDB:JSON and BSON

目录 什么是 JSON MongoDB-JSON连接 什么是 BSON MongoDB 使用 BSON 还是 JSON JSON 与 BSON 架构灵活性和数据治理 JSON 和 BSON 是近亲&#xff0c;正如它们几乎相同的名称所暗示的那样JSON&#xff08;即 JavaScript 对象表示法&#xff09;是网络上广泛流行的数据交换…

Transformer 结构

目录 一、Transformer 的整体结构二、Input Encoding三、Transformer Block3.1 Encoder3.1.1 Attention3.1.2 Self-attention3.1.3 Multi-head Attention 3.2 Decoder3.2.1 Masked Multi-head Attention 四、Transformer 的优缺点 遇到看不明白的地方&#xff0c;欢迎在评论中留…

Leetcode 矩阵问题

36题.有效的数独 此类问题特点是给出行列的多种限定条件&#xff0c;数独限制每行每列每个小九宫格元素范围为1-9且不可重复 。解决此类问题最简单的想法就是使用哈希set&#xff0c;记录每行&#xff0c;每列&#xff0c;每个小九宫格已经出现的元素。在遍历矩阵时提前做出是否…