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

news2024/11/16 5:59:28

目录

1. 字符函数

1.1 字符分类函数

1.2 字符转换函数

2. 字符串函数

2.1 strlen 函数

2.2 strcpy 函数

2.3 strcat 函数

2.4 strcmp 函数

2.5 strncpy 函数

2.6 strncat 函数

2.7 strncmp 函数

2.8 strstr 函数

结语

 


1. 字符函数

在C语言标准库中提供了一系列用于处理字符的函数,这些函数定义在 <ctype.h>头文件中。

字符函数分为两种字符分类函数字符转换函数

1.1 字符分类函数

C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符。

例如:islower函数是判断参数部分是否为小写字母,如果是小写字母就返回非0的数字,如果不是小写字母就返回0

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c = 'A';
	int ret = islower(c);
	printf("%d", ret);
	return 0;
}

运行结果:

练习:写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变

#include<stdio.h>
#include<ctype.h>
int main()
{
	char str[] = "hello world";
	int i = 0;
	while (str[i])
	{
		if (islower(str[i]))
		{
			str[i] = str[i] - 32;
		}
		i++;
	}
	printf("%s", str);
	return 0;
}

运行结果:
  对于剩余的字符分类函数,大家可以手动进行尝试一下,这里就不在进行详细介绍啦

1.2 字符转换函数

C语⾔提供了2个字符转换函数:

tolower ( c ); //将参数传进去的⼤写字⺟转⼩写

toupper ( c ); //将参数传进去的⼩写字⺟转⼤写

tolower函数示例:

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c=tolower('A');
	printf("%c", c);
	return 0;
}

 

toupper函数示例:

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c=toupper('a');
	printf("%c", c);
	return 0;
}

学习完字符转换函数后,我们将上面练习的代码进行改造一下:

int main()
{
	char str[] = "hello world";
	int i = 0;
	while (str[i])
	{
		if (islower(str[i]))
		{
			str[i] = toupper(str[i]);
		}
		i++;
	}
	printf("%s", str);
	return 0;
}


上⾯的代码,我们将⼩写转⼤写,是-32完成的效果,有了转换函数,就可以直接使⽤ tolowe函数。

2. 字符串函数

在C语言标准库中的<string.h>头文件中提供了一系列用于处理字符串的函数,这些函数用于字符串的复制、连接、比较、搜索、分割等操作。

下面介绍一些C语言中常用的字符串函数

2.1 strlen 函数

strlen函数是用来计算参数(字符串)长度的(不包括终止的空字符 \0 )

strlen函数的注意事项:

• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包    含 '\0' )。

• 参数指向的字符串必须要以 '\0' 结束。

• 注意函数的返回值为 size_t,是⽆符号的( 易错 )

• strlen的使⽤需要包含头⽂件

strlen函数的使用:

注意这里的初始化方式会在 str字符数组默认最后加上一个 \0,如果用另一种初始化方式会出现什么现象呢?

为什么这里计算str字符数组的长度是74呢?因为这里的初始化方式是不会自动补上 \0,所以strlen函数会根据地址一直往后找,直到找到 \0,所以这里的 74 实际上是一个随机值。

此时我们在数组的末尾加上 \0 这时候strlen函数计算的结果就是 \0前面的字符个数。 

2.2 strcpy 函数

strcpy函数会将源指向的字符串复制到目标指向的数组中,包括终止的空字符(并在该点停止)

strcpy函数的注意事项: 

• destination指向字符串复制到的数组,source指向要复制的字符串

• 源字符串必须以 '\0' 结束。

• 会将源字符串中的 '\0' 拷⻉到⽬标空间。

• ⽬标空间必须⾜够⼤,以确保能存放源字符串。(否则会出现栈帧空间溢出的现象)

• ⽬标空间必须可修改。

例如:

2.3 strcat 函数

strcat函数是将字符串source连接到destination的末尾(包括终止的空字符 \0)

strcat函数的注意事项:

• 源字符串必须以 '\0' 结束。

• ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。

• ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。

• ⽬标空间必须可修改。

例如:

注意这里被追加的目标空间必须保证足够大,否则也会出现栈帧空间溢出的现象

那么strcat函数是否可以自己追加自己呢?其实是可以的,但是一般不会这样使用,使用不当很容易造成死循环的问题 ,对于自己追加自己,我们一般使用strncat函数,在下面我们将会了解到strncat函数。

2.4 strcmp 函数

strcmp函数是用于两个字符串进行比较的

• 如果第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字

• 如果第⼀个字符串等于第⼆个字符串,则返回0

• 如果第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字 

例如:

2.5 strncpy 函数

strncpy和strcpy是非常相似的,strncpy在参数部分加上了复制的字节个数(size_t  num)

用法与strcpy也是一模一样的,只是这时候可以由我们操控复制多少个字节(num)到目标位置。

例如:

注意:如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。 

2.6 strncat 函数

对比strcat函数,strncat函数在参数部分也多了一个(size_t num)追加的字节个数

例如:

这时候就可以自己操控自己想要追加的内容了

注意:如果source 指向的字符串的⻓度⼩于num的时候,只会将字符串中到 \0 的内容追加到destination指向的字符串末尾

例如:

2.7 strncmp 函数

对比strcmp函数,strncmp函数在参数部分也多了一个(size_t num)比较的字节个数

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀ 样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0

例如:

 此时只是比较的str1和str2中的前3个字符,前三个字符相等所以返回值为0

2.8 strstr 函数

strstr函数的作用是在一个字符串(str1)中查找第一次出现的子字符串(str2),并返回指向该子字符串的指针,如果没有找到子字符串,则返回NULL(空指针)

例如:

结语

以上就是C语言中常见的字符函数以及字符串函数,希望通过本章的学习,大家能够利用这些函数使得代码更加简洁并且提高程序执行的效率,如果有感兴趣的小伙伴可以想一想这些函数是如何实现的,自己是否也可以手动实现这些函数。在此感谢大家的观看~

 

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

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

相关文章

【运维监控】Prometheus+grafana监控tomcat运行情况

运维监控系列文章入口&#xff1a;【运维监控】系列文章汇总索引 文章目录 一、prometheus二、grafana三、tomcat与jmx_exporter配置1、下载jmx_exporter2、部署jmx_exporter3、添加tomcat的配置信息4、修改tomcat的启动文件5、重启tomcat及验证6、其他 四、集成prometheus与gr…

【PythonCode】力扣Leetcode41~45题Python版

【PythonCode】力扣Leetcode41~45题Python版 前言 力扣Leetcode是一个集学习、刷题、竞赛等功能于一体的编程学习平台&#xff0c;很多计算机相关专业的学生、编程自学者、IT从业者在上面学习和刷题。 在Leetcode上刷题&#xff0c;可以选择各种主流的编程语言&#xff0c;如C…

蓝桥杯备赛---1.安装软件 配置环境

1.准备比赛软件安装包 2.安装java环境 根据电脑型号选择环境&#xff0c;一般是x64&#xff0c;安装即可 3.安装STM32CubeMx 点击next默认安装即可 安装之后打开cubeMX&#xff0c;选择顶层Help&#xff0c;点击Mange embeded software packege 选择软件包添加 4.安装keil 点击…

jsp+sevlet+mysql实验室设备管理系统2.0

jspsevletmysql实验室设备管理系统2.0 一、系统介绍二、功能展示1.控制台2.申购设备3.设备列表4.设备维护5.设备类型6.报废设备7.维修记录 四、其它1.其他系统实现 一、系统介绍 系统主要功能&#xff1a; 普通用户&#xff1a;控制台、申购设备、设备列表、设备维护、设备类型…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二集:通过InControl插件实现绑定玩家输入以及制作小骑士移动空闲动画

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、通过InControl插件实现绑定玩家输入二、制作小骑士移动和空闲动画 1.制作动画2.玩家移动和翻转图像3.状态机思想实现动画切换总结 前言 好久没来CSDN看看&…

低代码开发平台:常用动态脚本Groovy

目录 引言 Groovy 的应用场景 安全问题与解决方案 SQL 注入攻击 反序列化攻击 输入验证 文件路径遍历 命令注入 结论 引言 Groovy 是一种动态语言&#xff0c;它运行在 Java 虚拟机&#xff08;JVM&#xff09;上&#xff0c;并且与 Java 有着很好的互操作性。Groovy…

MATLAB基础应用精讲-【数模应用】卡方拟合优度检验(附MATLAB、python和R语言代码实现)

目录 前言 几个高频面试题目 卡方分布与拟合优度的卡方检验是什么关系? 算法原理 什么是卡方检验 卡方是什么? 如何使用卡方表计算器? 什么是卡方拟合优度检验 使用条件 基本原理 数学模型 卡方检验自由度 理论频数计算 需要注意的事项 卡方检验分类 1、 独…

【Linux】NAT

一、NAT技术背景 之前&#xff0c;我们就讨论了在IPv4协议中&#xff1a;IP协议数量不充足的问题。NAT技术当前解决IP地址不够用的主要手段&#xff0c;是路由器的一个重要功能。对&#xff0c;现在路由器不仅可以工作到网络层&#xff0c;也可以工作到应用层。 NAT能够将私有…

【Hot100】LeetCode—45. 跳跃游戏 II

目录 1- 思路覆盖范围 2- 实现⭐45. 跳跃游戏 II——题解思路 3- ACM 实现 原题链接&#xff1a;45. 跳跃游戏 II 1- 思路 覆盖范围 int cur 0 &#xff1a;记录当前的覆盖范围int next 0&#xff1a;记录当前结点最远的跳跃距离int res 0&#xff1a;记录具体跳几步 覆盖…

tp6.0.8反序列化漏洞的一些看法

更多漏洞分析的内容&#xff0c;可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/5741.html 环境搭建 composer create-project topthink/think6.0.x-dev thinkphp-v6.0 首先构造一个反序列化点 app/controller/Index.php <?php namespace app\contro…

Claude Prompt 汉语新解

感谢刚哥&#xff01; ;; 作者: 李继刚 ;; 版本: 0.3 ;; 模型: Claude Sonnet ;; 用途: 将一个汉语词汇进行全新角度的解释 ​ ;; 设定如下内容为你的 *System Prompt* (defun 新汉语老师 () "你是年轻人,批判现实,思考深刻,语言风趣" (风格 . ("Oscar Wilde&q…

Linux shell编程学习笔记78:cpio命令——文件和目录归档工具(上)

0 前言 在Linux系统中&#xff0c;除了tar命令&#xff0c;我们还可以使用cpio命令来进行文件和目录的归档。 1 cpio命令的功能&#xff0c;帮助信息&#xff0c;格式&#xff0c;选项和参数说明 1.1 cpio命令的功能 cpio 名字来自 "copy in, copy out"&#xf…

Redis网络模型、通信协议、内存回收

Redis网络模型 一、用户空间和内核空间&#xff08;前提&#xff09;问题来了&#xff1a;为啥要区分用户空间和内核空间呢&#xff1f;我们来看看两个空间以及硬件是如何操作的 二、Linux中五种IO模型1、 阻塞IO2、非阻塞IO3、IO多路复用3.1、SELECT3.2、poll3.3、epoll 4、信…

北大领衔:多智能体研究登上Nature子刊

这篇笔记可以作为接EoT那篇笔记内容中某种思想内涵的延伸和实践&#xff0c;即均是将智能体之间的关系描述为一种拓扑连接结构下的网络化关系进行研究&#xff08;贴近物理世界更加真实、自然、客观的拓扑结构&#xff09;&#xff0c;在这项研究中&#xff0c;更多的扩展到大规…

SpringCloud-04 OpenFeign服务调用与负载均衡

OpenFeign是一个声明式、模板化的HTTP客户端&#xff0c;它简化了在Java应用程序中调用RESTful API的过程。OpenFeign是Netflix开发的一个开源项目&#xff0c;它构建在Feign的基础上&#xff0c;为开发者提供了更加简单、灵活的方式来实现HTTP请求。OpenFeign的特点包括&#…

蓝桥杯真题——约翰的牛奶

输入样例&#xff1a; 8 9 10 输出样例&#xff1a; 1 2 8 9 10 本题是宽搜的模版题&#xff0c;不论怎么倒牛奶&#xff0c;A,B,C 桶里的牛奶可以看做一个三元点集 我们只要找到A桶是空的&#xff0c;B,C桶中的状态即可 #include <iostream> #include <cstring…

四、滑动窗口-算法总结

文章目录 四、滑动窗口4.1 模板4.2 示例4.2.1 最小覆盖子串4.2.2 字符串的排列4.2.3 找到字符串中所有字母异位词4.2.4 无重复字符的最长子串 四、滑动窗口 4.1 模板 /* 滑动窗口算法框架 */ void slidingWindow(string s, string t) {unordered_map<char, int> need, …

【C++题解】1398. 奇偶统计

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1398. 奇偶统计 类型&#xff1a;二维数组 题目描述&#xff1a; 在一个n行m列的二维数组中&#xff0c;有若干奇数和偶数&#xff0c;请编程统计出这个二维数组中&#xff0c;奇数…

使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步

1、下载地址 --查看是否开启bin_log日志&#xff0c;value on表示开启 SHOW VARIABLES LIKE log_bin; -- 查看bin_log日志文件 SHOW BINARY LOGS; --查看bin_log写入状态 SHOW MASTER STATUS; --查看bin_log存储格式 row SHOW VARIABLES LIKE binlog_format; --查看数据库服…

actuator字符绕过漏洞在Nginx上的配置

最近遇到了安全部门派发的actuator泄漏漏洞&#xff0c;领导希望不暴露到外网上&#xff0c;对于内网需要认证才可以访问。 要想不暴露到外网上&#xff0c;就需要在网络层面做拦截&#xff0c;比如nginx和apisix上做代理配置。 URI字符绕过的风险背景知识: URI字符绕过是一种安…