嵌入式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…

苹果开发者证书申请流程

苹果开发者证书申请流程&#xff1a; 1.Certificates 后面加号 2.iOS Distribution (App Store and Ad Hoc) 点击continue 3.选择Upload a Certificate Signing Request To manually generate a Certificate, you need a Certificate Signing Request (CSR…

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

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

多租户与低代码开发的应用:解锁企业数字化转型的无限可能

在数字化转型的浪潮中&#xff0c;多租户与低代码开发已经成为推动企业快速、灵活、安全地构建和部署应用的关键技术。本文将深入探讨这两种技术的结合如何为企业带来前所未有的变革和机遇。 多租户架构&#xff1a;资源共享与隔离的艺术 多租户架构&#xff0c;是一种高级的软…

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

随着云计算的飞速发展&#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兼容多种…

CMake之嵌套的CMakeLists

文章目录 前言项目结构节点关系如何嵌套多个cmake示例程序cmake 总结 前言 在现代软件开发中&#xff0c;CMake 是一个非常重要的工具&#xff0c;它允许开发者编写可移植的构建脚本来管理项目。对于大型项目&#xff0c;通常会有多个模块或子项目&#xff0c;这时候就需要用到…

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

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

numpy.random.seed()使用

import numpy as npnp.random.seed(2) # 生成随机种子2 一次使用机会 作用在下一个随机数生成的时候 a np.random.random() # 使用随机种子2 b np.random.random() # 因为随机种子使用完了 &#xff01; 这里使用默认按系统根据时间作为seed参数的随机种子 print(a) # 随…

手机取证基础知识(一)

文章关键词&#xff1a;手机取证、电子数据取证 手机取证&#xff0c;也称为移动设备取证或智能手机取证&#xff0c;是数字取证的一个分支&#xff0c;专注于从智能手机和其他移动设备中提取、分析和呈现证据的过程。这项技术通常用于法律调查&#xff0c;尤其是在犯罪调查中…

关于 AI 音乐大模型的研究报告

摘要&#xff1a;本研究报告聚焦于近期上线的音乐大模型&#xff0c;探讨其对音乐创作门槛的降低影响&#xff0c;分析其引发的关于音乐圈是否会被 AI 彻底颠覆的讨论&#xff0c;以及深入研究与之相关的版权归属和创意产业在 AI 影响下的发展等问题。 一、引言 在过去的一个月…

JavaScript(1)——JS介绍

JS是什么 是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互的效果 作用&#xff08;做什么&#xff09; 网页特效&#xff08;监听用户的一些行为让网页做出对应的反馈&#xff09;表单验证&#xff08;针对表单数据的合法性行为进行判…

PHP实战:轻松实现商品库存批量导入,高效管理不是梦!

在电商平台上&#xff0c;批量导入商品库存是一个常见的需求。通过批量导入&#xff0c;商家可以快速更新大量商品的库存信息&#xff0c;提高工作效率。本文将介绍如何使用PHP编程语言实现这一功能&#xff0c;方便商家进行库存管理。 首先&#xff0c;我们需要创建一个表格文…

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

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

【Android 构建新工具】Bazel 构建Android项目

【Android 构建新工具】Bazel 构建Android项目 本文我们使用Bazel构建一个最简单的Android项目。Bazel提供了编译Android程序内置的方法,具体参考:Android Rules 1. 环境准备 Bazel只是编译工具,不是真正的编译器,所以还是需要Andorid开发的SD、NDK以及Android Studio,…

基于改进天鹰优化算法(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;技术解…