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

news/2024/9/18 14:49:32/ 标签: c语言, 开发语言, 学习

目录

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.ppmy.cn/news/1525225.html

相关文章

RocketMQ 消费方式

在消息传递系统中&#xff0c;“推&#xff08;Push&#xff09;”和“拉&#xff08;Pull&#xff09;”是两种不同的消息消费方式&#xff0c;RocketMQ 也支持这两种模式。下面是对这两种模式的详细解释&#xff1a; 1. 推模式&#xff08;Push Model&#xff09; 模式简介…

【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版

文章目录 一、算法概念一、算法原理&#xff08;一&#xff09;分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost 分类损失函数5、样本权重更新6、AdaBoost 的强分类器 &#xff08;二&#xff09;回归算法基本思路1、最大误差的计算2…

智慧环保平台建设方案

智慧环保平台建设方案摘要 政策导向与建设背景 背景&#xff1a;全国生态环境保护大会提出坚决打好污染防治攻坚战&#xff0c;推动生态文明建设&#xff0c;目标是在2035年实现生态环境质量根本好转。构建生态文明体系&#xff0c;包括生态文化、生态经济、目标责任、生态文明…

【每日一题】LeetCode 2398.预算内的最多机器人数目(滑动窗口、数组、二分查找、前缀和、堆(优先队列))

【每日一题】LeetCode 2398.预算内的最多机器人数目&#xff08;滑动窗口、数组、二分查找、前缀和、堆&#xff08;优先队列&#xff09;&#xff09; 题目描述 给定两个整数数组 chargeTimes 和 runningCosts&#xff0c;分别代表 n 个机器人的充电时间和运行成本。再给定一…

通过docker overlay2目录名查找容器名和容器ID

有时候经常会有个别容器占用磁盘空间特别大&#xff0c;这个时候就需要通过docker overlay2 日录名查找对应容器名. 1.首先进入到 /var/lib/docker/overlay2 目录下 # cd /var/lib/docker/overlay2 2.查看谁占用容间最大 # du -h -d 1 | grep G |sort -nr 3.再通过目录名查找…

【机器学习(二)】分类和回归任务-决策树算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;树的构造&#xff08;二&#xff09;划分选择1、信息增益2、基尼指数3、卡方检验 &#xff08;三&#xff09;停止标准&#xff08;四&#xff09;剪枝处理1、预剪枝2、后剪枝 三、决策树的优缺点四、决策树分类任…

centos下nvme over rdma 环境配置

nvme over rdma 环境配置 本文主要介绍NVMe over RDMA的安装和配置。关于什么是NVMe over Fabrics,什么是NVMe over RDMA&#xff0c;本文就不做介绍了&#xff0c;网上资料一大堆。 可以看看什么是NVMe over Fabrics&#xff1f; RDMA&#xff08;全称&#xff1a;Remote Dir…

DevOps -CI/CD 与自动化部署

DevOps - CI/CD 与自动化部署详解 DevOps 是一种结合开发&#xff08;Development&#xff09;与运维&#xff08;Operations&#xff09;的方法论&#xff0c;旨在通过工具和文化变革&#xff0c;促进软件开发和运维之间的协作&#xff0c;提升软件交付的效率、质量和稳定性。…

Golang | Leetcode Golang题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; func canCross(stones []int) bool {n : len(stones)dp : make([][]bool, n)for i : range dp {dp[i] make([]bool, n)}dp[0][0] truefor i : 1; i < n; i {if stones[i]-stones[i-1] > i {return false}}for i : 1; i < n; i {…

Qt_控件的QWidget属性介绍

目录 1、QWidget的核心属性 2、enabled 3、geometry 3.1 代码测试geometry 4、windowTitle 4.1 代码测试windowTitle 5、windowIcon 5.1 QIcon设置图标 5.2 qrc机制 5.3 代码测试windowIcon 6、windowOpacity 6.1 代码测试windowOpacity 7、cursor 7.1 代码测试…

自动化任务的错误处理:编写健壮的自动化脚本,处理Office应用中的错误和异常情况

目录 引言 一、自动化任务概述 二、自动化脚本编写基础 2.1 环境准备 2.2 脚本结构 2.3 示例代码 三、Office应用中的错误和异常情况处理 3.1 文件访问权限问题 3.2 文件格式不兼容 3.3 宏病毒和安全性问题 3.4 控件错误和插件问题 四、异常处理与日志记录 4.1 捕…

Apple M3编译OpenSSL安卓平台SO库

1.下载OpenSSL源码: https://github.com/openssl/openssl.git 2.配置NDK环境变量:vim ~/.zprofile 添加ANDROID_NDK_ROOT环境变量,iosdev改为你自己的用户名 export ANDROID_NDK_ROOT=/Users/iosdev/Library/Android/sdk/ndk/23.1.7779620 添加NDK下可执行文件路径到PATH环…

工具、环境等其他小问题归纳

此篇文章内容会不定期更新&#xff0c;仅作为学习过程中的笔记记录 一、查询Windows 10环境下python版本与安装路径 若电脑成功安装了python环境&#xff0c;不小心忘了版本。 I、查询版本 1、cmd窗口快捷查询 Win R 输入cmd 进入窗口&#xff1b; 直接输入 python --version …

华为 HCIP 认证费用和报名资格

在当今竞争激烈的信息技术领域&#xff0c;华为 HCIP认证备受关注。它不仅能提升个人的技术实力与职业竞争力&#xff0c;也为企业选拔优秀人才提供了重要依据。以下将详细介绍华为 HCIP 认证的费用和报名资格。 一、HCIP 认证费用 华为HCIP认证的费用主要由考试费和培训费构成…

Linux 安装神州通用数据库 ShenTong7.0.8_342.92_linux64

Linux 安装神州通用数据库 ShenTong7.0.8_342.92_linux64 1、准备工作2、安装数据库3、启停数据库4、后续步骤 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Linux环境下安装神州通用数据库&#xff08;ShenTong&#xff09;是一个相对直…

Go中更安全的枚举

iota Go让你用iota来使用枚举。 const (Guest iotaMemberModeratorAdmin )虽然Go是明确的&#xff0c;但iota似乎相对模糊。如果你以任何其他方式对const组进行排序&#xff0c;你会引入副作用。在上面的例子中&#xff0c;你仅仅对第一个参数Guest赋值了。你可以显式地给每…

【前端】vue+html+js 实现table表格展示,以及分页按钮添加

一. 问题描述 数据条数太多显示到页面上时可能会渲染较慢&#xff0c;因此需要截取数据进行展示。 二. 代码写法 思路&#xff1a;按照上述图示思路&#xff0c;需要有两个数据列表&#xff0c;一个存储的是所有的列表数据&#xff0c;一个存储的是展示的数据列表&#xff0c…

jQuery UI API 文档

关于《jQuery UI API 文档》&#xff0c;我找到了一些有用的信息。jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互、特效、小部件及主题。如果您是 jQuery 新手&#xff0c;建议您先查看 jQuery 教程。目前&#xff0c;我找到的资料主要是关于 jQuery UI 1.10 版…

【加密社】深入理解TON智能合约 (FunC语法)

king: 摘要&#xff1a;在TON&#xff08;TheOpenNetwork&#xff09;区块链平台中&#xff0c;智能合约扮演着举足轻重的角色。本文将通过分析一段TON智能合约代码 带领读者学习dict&#xff08;字典&#xff09;和list&#xff08;列表&#xff09;在FunC语言中的用法&#x…

LeetCode_sql_day24(1212.查询球队积分)

描述 表: Teams ------------------------- | Column Name | Type | ------------------------- | team_id | int | | team_name | varchar | ------------------------- team_id 是该表具有唯一值的列。 表中的每一行都代表一支独立足球队。表: Matches…