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

初出茅庐的小李博客之常见字符串函数使用

C语言字符数组与字符串数组

在C语言中,字符数组字符串数组实际上是同一种类型。字符串是由字符组成的字符数组,通常以空字符 ‘\0’ 结尾。C语言中的字符串是一种常见的数据类型。我们可以通过两种方式定义字符数组跟字符串数组

char charArray[10];               // 定义一个包含10个字符的字符数组
char strArray[10] = "Hello";      // 定义并初始化一个字符串数组

常用函数之strlen()函数

strlen 是 C 语言中的一个字符串函数,用于计算字符串的长度,即字符串中字符的个数(注意它是不包括结尾的空字符 ‘\0’)。

函数原型如下:

size_t strlen(const char *str);

参数 str 是一个指向以空字符 ‘\0’ 结尾的字符串的指针。函数返回一个 size_t 类型的值,表示字符串的长度。

以下是一个使用 strlen 函数的示例代码:

#include <stdio.h>
#include <string.h>int main(void) 
{char str[] = "Hello, World!";size_t length = strlen(str);printf("Length of the string: %zu\n", length);return 0;
}

在上述示例中,我们定义了一个字符串 str,并使用 strlen 函数计算字符串的长度,将结果保存在变量 length 中。最后,使用 printf 函数打印字符串的长度。

输出结果为:

Length of the string: 13

注意,strlen 函数返回的长度不包括结尾的空字符 ‘\0’。所以对于上述示例中的字符串 “Hello, World!”,虽然实际占用的字符数为 13,但 strlen 函数返回的结果是 13,而不是 14。这是因为 C 语言中的字符串以空字符 ‘\0’ 结尾,作为字符串的结束标志。

5个字母+1个逗号 + 1个空格 + 5个字母+1个感叹号 = 13个字节

常用函数之strcpy()函数

strcpy 是 C 语言中的一个字符串函数,用于将一个字符串复制到另一个字符串中。

函数原型如下:

char *strcpy(char *dest, const char *src);

参数 dest 是目标字符串的指针,src 是源字符串的指针。函数将源字符串的内容复制到目标字符串中,并返回指向目标字符串的指针。//后面的字符串被复制到前面的那个字符串 并返回指向的目标字符串指针

以下是一个使用 strcpy 函数的示例代码:

#include <stdio.h>
#include <string.h>int main(void){char src[] = "Hello";char dest[10];strcpy(dest, src);printf("Copied string: %s\n", dest);return 0;
}

在上述示例中,我们定义了一个源字符串 src,内容为 “Hello”,以及一个目标字符串 dest,大小为 10。使用 strcpy 函数将源字符串的内容复制到目标字符串中。最后,使用 printf 函数打印目标字符串的内容。

输出结果为:

Copied string: Hello

注意,在使用 strcpy 函数时,需要确保目标字符串的缓冲区足够大以容纳源字符串的内容。否则,可能会导致缓冲区溢出的错误。此外,确保源字符串以空字符 ‘\0’ 结尾,以便 strcpy 函数正确复制整个字符串。

常用函数之strcmp()函数

strcmp 是 C 语言中的一个字符串函数,用于比较两个字符串是否相等。

函数原型如下:

int strcmp(const char *str1, const char *str2);

参数 str1str2 是两个要比较的字符串的指针。函数返回一个整数值,表示比较结果的大小关系:

  • 如果 str1str2 相等,则返回 0。
  • 如果 str1 按字典顺序小于 str2,则返回负数。
  • 如果 str1 按字典顺序大于 str2,则返回正数。

什么是按照字典排序呢?

按字典顺序是一种基于字母字符的比较方式,类似于字典中单词的排列顺序。在 C 语言中,字符串的比较操作是按照字典顺序进行的。

字典顺序比较的规则如下:

  1. 比较字符串中对应位置的第一个字符。
  2. 如果两个字符不相等,那么根据它们的 ASCII 值来确定它们的大小关系。较小的字符被认为是在字典中较早的位置较大的字符被认为是在字典中较后的位置
  3. 如果两个字符相等,则继续比较下一个字符,直到找到不相等的字符或遇到字符串的结尾(即遇到空字符 ‘\0’)。
  4. 如果其中一个字符串到达结尾而另一个字符串还有剩余字符,则被认为到达结尾的字符串较小。

以下是一些示例,帮助理解按字典顺序比较字符串的结果:

  • “apple” 按字典顺序小于 “banana”,因为 ‘a’ 比 ‘b’ 小。ASCII码值小
  • “cat” 按字典顺序大于 “dog”,因为 ‘c’ 比 ‘d’ 大。
  • “hello” 按字典顺序等于 “hello”,因为每个对应位置的字符都相等。
  • “open” 按字典顺序大于 “office”,因为在第一个字符 ‘o’ 相等的情况下,第二个字符 ‘p’ 比 ‘f’ 大。

需要注意的是,字母的大小比较是基于其对应的 ASCII 值进行的。在 ASCII 编码中,小写字母的 ASCII 值比大写字母的 ASCII 值大*。因此,在按字典顺序比较字符串时,大写字母会被认为是在相应小写字母之前。*

理解按字典顺序比较字符串的概念对于正确使用字符串比较函数(如 strcmp)以及处理字符串排序等操作非常重要。

以下是一个使用 strcmp 函数的示例代码:

#include <stdio.h>
#include <string.h>int main(void) 
{char str1[] = "Hello";char str2[] = "World";int result = strcmp(str1, str2);if (result == 0) {printf("Strings are equal.\n");} else if (result < 0) {printf("str1 is less than str2.\n");} else {printf("str1 is greater than str2.\n");}return 0;
}

在上述示例中,我们定义了两个字符串 str1str2,分别赋值为 “Hello” 和 “World”。使用 strcmp 函数比较这两个字符串,并将结果保存在变量 result 中。然后根据比较结果打印相应的消息。

输出结果为:

str1 is less than str2.

在此示例中,由于 “Hello” 按字典顺序小于 “World”,所以 strcmp 函数返回一个负数值,表明 str1 小于 str2。根据返回的结果,我们输出了相应的消息。

需要注意的是,strcmp 函数是区分大小写的。如果要执行不区分大小写的字符串比较,可以使用 strcasecmp 函数(在一些编译器中可能称为 _stricmp)。

这是在dev的string.h一段代码 它支持strcasecmp 以及_stricmp
#ifndef __CRT__NO_INLINE__CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }__CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
#else
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif /* !__CRT__NO_INLINE */

常用函数之strcat()函数

strcat 是 C 语言中的一个字符串函数,用于将一个字符串连接到另一个字符串的末尾。

函数原型如下:

char *strcat(char *dest, const char *src);

参数 dest 是目标字符串的指针,src 是源字符串的指针。函数将源字符串的内容连接到目标字符串的末尾,并返回指向目标字符串的指针。

以下是一个使用 strcat 函数的示例代码:

#include <stdio.h>
#include <string.h>int main(void){char str1[20] = "Hello";char str2[] = ", World!";strcat(str1, str2);printf("Concatenated string: %s\n", str1);return 0;
}

在上述示例中,我们定义了一个目标字符串 str1,大小为 20,并初始化为 “Hello”。然后,定义了一个源字符串 str2,内容为 “, World!”。使用 strcat 函数将 str2 连接到 str1 的末尾,修改了 str1 的内容。最后,使用 printf 函数打印连接后的字符串。

输出结果为:

Concatenated string: Hello, World!

strcat 函数会将源字符串的内容追加到目标字符串的末尾,并确保目标字符串以空字符 ‘\0’ 结尾。在示例中,str1 原先以空字符结尾,strcat 函数会将 str2 的内容从 str1 结尾处开始拷贝,覆盖掉 str1 的空字符,并在连接的末尾添加一个新的空字符。

需要注意的是,在使用 strcat 函数时,确保目标字符串的缓冲区足够大,以容纳源字符串的内容和额外的空字符。否则,可能会导致缓冲区溢出的错误。

类似这样的函数还有哪些呢?

除了这个几常见的字符串函数外,C 语言还有许多其他常用的字符串函数。以下是一些高频使用的字符串函数:

  1. strcat:用于将一个字符串连接到另一个字符串的末尾。
  2. strncat:类似于 strcat,但是可以指定要连接的字符数。
  3. strcmp:已经提到过,用于比较两个字符串是否相等。
  4. strncmp:类似于 strcmp,但是可以指定要比较的字符数。
  5. strcpy:已经提到过,用于将一个字符串复制到另一个字符串中。
  6. strncpy:类似于 strcpy,但是可以指定要复制的字符数。
  7. strchr:在字符串中搜索指定字符的第一个出现位置,并返回指向该位置的指针。
  8. strrchr:在字符串中搜索指定字符的最后一个出现位置,并返回指向该位置的指针。
  9. strstr:在字符串中搜索指定子字符串的第一个出现位置,并返回指向该位置的指针。
  10. strtok:将字符串分割成多个子字符串,使用指定的分隔符进行分割。
  11. sprintf:将格式化的数据写入字符串。
  12. sscanf:从字符串中读取格式化的数据。
  13. strlen:已经提到过,用于计算字符串的长度。
  14. memset:将指定的值复制到字符串的每个字符。
  15. memcpy:将一个字符串的内容复制到另一个字符串。

这些函数是 C 语言中处理字符串时经常使用的函数,它们提供了广泛的功能,可用于字符串操作、搜索、比较、复制等。了解和熟练使用这些函数对于处理字符串数据非常重要。建议在需要使用特定功能时,查阅相关函数的文档并参考示例代码以确保正确使用。

相关文章:

初出茅庐的小李博客之常见字符串函数使用

C语言字符数组与字符串数组 在C语言中&#xff0c;字符数组和字符串数组实际上是同一种类型。字符串是由字符组成的字符数组&#xff0c;通常以空字符 ‘\0’ 结尾。C语言中的字符串是一种常见的数据类型。我们可以通过两种方式定义字符数组跟字符串数组 char charArray[10];…...

运筹学工程化流程和常见的运筹学算法分类以及常见软件

文章目录 前言运筹学工程化流程运筹学算法分类运筹学软件参考文献 前言 自2023年初新冠疫情管控放开后&#xff0c;各家公司各类岗位的人员都有被裁的消息传出&#xff0c;但用人市场上运筹学算法岗位却反其道行之&#xff0c;用工出现了激增。可以预见的是数据算法将从传统的…...

JAVA面向对象(三)

第三章 封装与继承 目录 第三章 封装与继承 1.1.封装 1.2.包 1.3.访问权限控制 1.4.static修饰符 1.4.1.成员变量 1.4.2.成员方法 1.4.3.代码块 总结 内容仅供学习交流&#xff0c;如有问题请留言或私信&#xff01;&#xff01;&#xff01;&#xff01;&#xff0…...

前端面试题---跨域处理和异常、错误处理

一.跨域处理 在前端开发中&#xff0c;当我们在浏览器中向不同域名或端口发起请求时&#xff0c;就会遇到跨域请求的限制。为了处理跨域请求&#xff0c;有几种常见的方法 1.JSONP&#xff08;JSON with Padding&#xff09; JSONP是一种利用 <script> 标签可以跨域加载…...

网络安全之反序列化漏洞分析

简介 FastJson 是 alibaba 的一款开源 JSON 解析库&#xff0c;可用于将 Java 对象转换为其 JSON 表示形式&#xff0c;也可以用于将 JSON 字符串转换为等效的 Java 对象分别通过toJSONString和parseObject/parse来实现序列化和反序列化。 使用 对于序列化的方法toJSONStrin…...

19 贝叶斯线性回归

文章目录 19 贝叶斯线性回归19.1 频率派线性回归19.2 Bayesian Method19.2.1 Inference问题19.2.2 Prediction问题 19 贝叶斯线性回归 19.1 频率派线性回归 数据与模型&#xff1a; 样本&#xff1a; { ( x i , y i ) } i 1 N , x i ∈ R p , y i ∈ R p {\lbrace (x_i, y_…...

第七十天学习记录:高等数学:微分(宋浩板书)

微分的定义 基本微分公式与法则 复合函数的微分 微分的几何意义 微分在近似计算中应用 sin(xy) sin(x)cos(y) cos(x)sin(y)可以用三角形的几何图形来进行证明。 假设在一个单位圆上&#xff0c;点A(x,y)的坐标为(x,y)&#xff0c;点B(x’, y’)的坐标为(x’, y’)。则以两点…...

Jmeter

目录 一、jmeter 安装 二、jmeter 介绍 1、jmeter是什么&#xff1f; 2、jmeter 用来做什么&#xff1f; 3、优点 4、缺点 5、jmeter 目录介绍 ①_bin 目录介绍 ② docs 目录 — — 接口文档目录 ③ extras目录 — — 扩展插件目录 ④ lib 目录 — — 所用到的插件目录 ⑤ lic…...

Flutter 学习 之 时间转换工具类

Flutter 学习之时间转换工具类 在 Flutter 应用程序开发中&#xff0c;处理时间戳是非常常见的需求。我们通常需要将时间戳转换为人类可读的日期时间格式。为了实现这一点&#xff0c;我们可以创建一个时间转换工具类。 实现方法 以下是一个简单的时间转换工具类的示例&…...

docker consul

docker consul的容器服务更新与发现 服务注册与发现是微服务架构中不可或缺的重要组件&#xff0c;起始服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的承载压力&#xff0c;服务之间调用单纯的通过接口访问的&#xff0c;直到后来出现多个节点的分布式…...

全志V3S嵌入式驱动开发(开发环境再升级)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们陆陆续续开发了差不多有10个驱动&#xff0c;涉及到网口、串口、音频和视频等几个方面。但是整个开发的效率还是比较低的。每次开发调试的…...

ChatGPT:人工智能助手的新时代

ChatGPT&#xff1a;人工智能助手的新时代 文章目录 ChatGPT&#xff1a;人工智能助手的新时代引言ChatGPT的原理GPT-3.5架构概述预训练和微调过程生成式对话生成技术 ChatGPT的应用场景智能助理客服机器人虚拟角色教育辅助创意生成个性化推荐 ChatGPT的优势ChatGPT的使用技巧与…...

【面试】二、Java补充知识

JVM中的存储 JVM的五块存储区&#xff1a; 方法区&#xff08;线程共享&#xff09; 方法区用来存储类的各种信息&#xff08;类名、方法信息等&#xff09;、静态变量、常量和编译后的代码也存储在方法区中 方法区中也存在运行时常量池 ​ 常量池中会存放程序运行时生成的各种…...

LISTENER、TNSNAMES和SQLNET配置文件

LISTENER、TNSNAMES和SQLNET配置文件 用户连接验证listener.ora文件配置监听日志local_listener参数 tnsnames.ora文件配置 sqlnet.ora文件配置 用户连接验证 Oracle数据库中用户有三种常见的登录验证方式&#xff1a; 通过操作系统用户验证&#xff1a;必须是在数据库服务器…...

【Leetcode -225.用队列实现栈 -232.用栈实现队列】

Leetcode Leetcode -225.用队列实现栈Leetcode -232.用栈实现队列 Leetcode -225.用队列实现栈 题目&#xff1a;仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 …...

悟道3.0全面开源!LeCun VS Max 智源大会最新演讲

夕小瑶科技说 原创 作者 | 小戏 2023 年智源大会如期召开&#xff01; 这场汇集了 Geoffery Hinton、Yann LeCun、姚期智、Joseph Sifakis、Sam Altman、Russell 等一众几乎是 AI 领域学界业界“半壁江山”的大佬们的学术盛会&#xff0c;聚焦 AI 领域的前沿问题&#xff0c…...

2023蓝桥杯大学A组C++决赛游记+个人题解

Day0 发烧了一晚上没睡着&#xff0c;感觉鼻子被打火机烧烤一样难受&#xff0c;心情烦躁 早上6点起来吃了个早饭&#xff0c;思考能力完全丧失了&#xff0c;开始看此花亭奇谭 看了六集&#xff0c;准备复习数据结构考试&#xff0c;然后秒睡 一睁眼就是下午2点了 挂了个…...

wkhtmltopdf踩坑记录

1. 不支持writing-mode。 需求是文字纵向排列&#xff0c;内容从左到右&#xff0c;本来用的是writing-mode: tb-rl;&#xff0c;插件转pdf后发现失效。 解决方法&#xff1a; 让每一列文字单独用一个div容器包裹&#xff0c;对它的宽度进行限制&#xff0c;控制每一行只能出现…...

贪心算法part2 | ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

文章目录 122.买卖股票的最佳时机II思路思路代码官方题解困难 55. 跳跃游戏思路思路代码官方题解代码困难 45.跳跃游戏II思路思路代码困难 今日收获 122.买卖股票的最佳时机II 122.买卖股票的最佳时机II 思路 局部最优&#xff1a;将当天价格和前一天比较&#xff0c;价格涨…...

[C++]异常笔记

我不怕练过一万种腿法的对手,就怕将一种腿法 练一万次的对手。 什么是C的异常 在C中&#xff0c;异常处理通常使用try-catch块来实现。try块用于包含可能会抛出异常的代码&#xff0c;而catch块用于捕获并处理异常。当异常被抛出时&#xff0c;程序会跳过try块中未执行…...

浅谈一级机电管道设计中的压力与介质温度

管道设计是工程设计中的一个非常重要的部分&#xff0c;管道的设计需要考虑到许多因素&#xff0c;其中就包括管道设计压力分类和介质温度分类。这两个因素是在设计管道时必须非常严格考虑的&#xff0c; 首先是管道设计压力分类。在管道设计中&#xff0c;根据工作要求和要传输…...

Docker网络模型(八)使用 macvlan 网络

使用 macvlan 网络 一些应用程序&#xff0c;特别是传统的应用程序或监控网络流量的应用程序&#xff0c;期望直接连接到物理网络。在这种情况下&#xff0c;你可以使用 macvlan 网络驱动为每个容器的虚拟网络接口分配一个MAC地址&#xff0c;使其看起来像一个直接连接到物理网…...

控制视图内容的位置

文本域中的提示内容在默认情况下是垂直居中的&#xff0c;要改变文本在文本域中的位置&#xff0c;可以使用android:gravity来实现。 利用android:gravity可以指定如何在视图中放置视图内容&#xff0c;例如&#xff0c;如何在文本域中放置文本。 如果希望视图文本显示在上方&a…...

【分布式系统与一致性协议】

分布式系统与一致性协议 CAP原理APCPCA总结BASE理论 一致性拜占庭将军问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统的设计目标一般包含如下&#xff1a; 可用性&#xff1a;可用性是分…...

音视频领域的未来发展方向展望

文章目录 音视频领域的未来发展方向全景音视频技术虚拟现实和增强现实的区别 人工智能技术可视化智能分析智能语音交互图像识别和视频分析技术 语音处理智能推荐技术远程实时通信 流媒体技术未来方向 音视频领域的未来发展方向 全景音视频技术&#xff1a;全景音视频技术是近年…...

时间同步/集群时间同步/在线/离线

目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP&#xff08;Network Time Protocol&#xff09;网络时间协议&#xff0c;是用来使计算机时间同步的一种协议&#xff0c;它可以使计算机对其服务器或时钟源做同步…...

基于BP神经网络对MNIST数据集检测识别(numpy版本)

基于BP神经网络对MNIST数据集检测识别 1&#xff0e;作者介绍2&#xff0e;BP神经网络介绍2.1 BP神经网络 3&#xff0e;BP神经网络对MNIST数据集检测实验3.1 读取数据集3.2 前向传播3.3 损失函数3.4 构建神经网络3.5 训练3.6 模型推理 4&#xff0e;完整代码 1&#xff0e;作者…...

HTML5-创建HTML文档

HTML5中的一个主要变化是&#xff1a;将元素的语义与元素对其内容呈现结果的影响分开。从原理上讲这合乎情理。HTML元素负责文档内容的结构和含义&#xff0c;内容的呈现则由应用于元素上的CSS样式控制。下面介绍最基础的HTML元素&#xff1a;文档元素和元数据元素。 一、构建…...

Vue中Axios的封装和API接口的管理

一、axios的封装 在vue项目中&#xff0c;和后台交互获取数据这块&#xff0c;我们通常使用的是axios库&#xff0c;它是基于promise的http库&#xff0c;可运行在浏览器端和node.js中。他有很多优秀的特性&#xff0c;例如拦截请求和响应、取消请求、转换json、客户端防御XSR…...

MLIR面试题

1、请简要解释MLIR的概念和用途&#xff0c;并说明MLIR在编译器领域中的重要性。 MLIR(Multi-Level Intermediate Representation)是一种多级中间表示语言&#xff0c;提供灵活、可扩展和可优化的编译器基础设施。MLIR的主要目标是为不同的编程语言、领域专用语言(DSL)和编译器…...

云南省城乡住房建设厅网站/市场调研方法

引言 本文主要介绍 Pandas 对 CSV, Excel 格式数据的读写&#xff0c;更多 Python 进阶系列文章&#xff0c;请参考 Python 进阶学习 玩转数据系列 内容提要&#xff1a; XLS, CSV Data I/O Modules in Python Pandas 对 CSV 格式数据的读写 Pandas 对 Excel 格式数据的读写 …...

大良网站建设市场/软文广告100字

目录 一&#xff0c;写在前面 二&#xff0c;栈的定义 1&#xff0c;栈的定义 2&#xff0c;进栈出栈变化形式 三&#xff0c;栈的抽象数据类型 四&#xff0c;栈顺序存储结构及实现 1&#xff0c;栈的顺寻存储结构 2&#xff0c;栈的顺序存储结构——进栈操作 3&…...

品牌自适应网站建设/开发一个网站的步骤流程

/** JDK1.5后出现的特性,自动装箱和自动拆箱* 自动装箱: 基本数据类型,直接变成对象* 自动拆箱: 对象中的数据变回基本数据类型* 方便使用* 自动装箱和拆箱弊端,可能出现空指针异常*/ public class IntegerDemo_2 {public static void main(String[] args) {function…...

上传网站程序/做一个网站要花多少钱

关于kafka的环境搭建这里略过。 1. 正常流程 1.1 添加maven依赖 <dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.11</artifactId><version>2.2.0</version></dependency>&…...

做一个营销型网站/关键词挖掘站长工具

有一些平板或者一些早教机&#xff0c;都是内置了一张TF内存卡的&#xff0c;而有时候我们会因为内存卡太小&#xff1b;或者tf卡被误格式化导致内置的数据没有了&#xff0c;如果你还有朋友有这些机器的话&#xff0c;完全可以把他内存卡里的数据克隆出来&#xff0c;然后写入…...

创新驱动发展战略意义/seo优化需要做什么

实验环境 摘要拓扑图&#xff1a; 实验拓扑图 设备登录凭据 软路由设备&#xff1a;( GatewayIP: 1-9 ) Hostname IP Address Username/Password ispct-vyos eth0IP: 192.168.31.41/24 eth1IP: 192.168.10.1/24 dns: 192.168.30.191 ospfv2: Route-ID(1.1.1.1/32) vyos/12…...