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

C/C++中对字符处理的常用函数

        C语言中的 ctype.h 头文件提供了一系列字符分类和转换函数,用于高效处理字符相关操作。这些函数通过接受 int 类型参数(需为 unsigned char 或 EOF (-1)值),返回非零值表示条件正确,返回0表示错误。以下是常用函数的分类介绍:

 一、字符测试函数


1.  isalnum(int c)

        判断 字符 c 是否为字母或数字( a-z、A-Z、0-9 )

        isalnum(int c)
           判断 字符 c 是否为字母或数字( a-z、A-Z、0-9 )

                是 则返回非0值,否 则返回0;

char a;
if(isalnum(a)) //判断字符a是否为字母或数字( a-z、A-Z、0-9 )。
{printf("a是字母或数字");
}
else
{printf("a不是字母或数字");
}

        验证用户名是否合法时常用此函数。

2.  isalpha(int c)

判断 字符 c 是否为字母( a-z、A-Z )

        isalpha(int c)

         判断 字符 c 是否为字母( a-z、A-Z )

                是 则返回非0值,否 则返回0;

char a;
if(isalpha(a)) //判断字符a是否为字母( a-z、A-Z )。
{printf("a是字母");
}
else
{printf("a不是字母");
}

常用于过滤非字母字符。

3. isdigit(int c)

        判断 字符 c 是否为数字( 0-9 )

         isdigit(int c)

        判断 字符 c 是否为数字( 0-9 )

                是 则返回非0值,否 则返回0;

char a;
if(isdigit(a)) //判断字符a是否为数字( 0 - 9 )。
{printf("a是数字");
}
else
{printf("a不是数字");
}

适合验证输入是否为纯数字。

4.  isspace(int c)

        判断 字符 c 是否为空白字符( 空格`' '`、换行符`\n`、制表符`\t`等 )

        isspace(int c) 

        判断 字符 c 是否为空白字符( 空格`' '`、换行符`\n`、制表符`\t`等 )

                是 则返回非0值,否 则返回0;

char a;
if(isspace(a)) //判断字符a是否为空白字符( 空格`' '`、换行符`\n`、制表符`\t`等 )。
{printf("a是空白字符");
}
else
{printf("a不是空白字符");
}

常用于解析文本格式。

5.  islower(int c) 和  isupper(int c) 

分别判断`c`是否为小写字母(`a-z`)或大写字母(`A-Z`)

        islower(int c) 和  isupper(int c) 

        分别判断`c`是否为小写字母(`a-z`)或大写字母(`A-Z`)

        是 则返回非0值,否 则返回0;

char a;
if(islower(a)) //判断字符a是否为小写字母( a~z )
{printf("a是小写字母");
}
else
{printf("a不是小写字母");
}char a;
if(islower(a)) //判断字符a是否为大写字母( A ~ Z)
{printf("a是大写字母");
}
else
{printf("a不是大写字母");
}

可用于大小写敏感的场景。

6.  isxdigit(int c)

       判断`c`是否为十六进制数字( 0-9 、 a-f 、 A-F )

        isxdigit(int c)

        判断`c`是否为十六进制数字( 0-9 、 a-f 、 A-F )

        是 则返回非0值,否 则返回0;

char a;
if(islower(a)) //判断字符a是否为十六进制数字( 0-9 、 a-f 、 A-F )printf("a是十六进制数字");
}
else
{printf("a不是十六进制数字");
}

适用于解析十六进制字符串。 

7.  ispunct(int c)

      判断`c`是否 为标点符号(如`!`、`?`等)

        ispunct(int c)

        判断`c`是否 为标点符号(如`!`、`?`等)

        是 则返回非0值,否 则返回0;

char a;
if(islower(a)) //判断字符a是否为标点符号(如`!`、`?`等)printf("a是标点符号");
}
else
{printf("a不是标点符号");
}


   用于过滤非字母数字符号。

8.  isprint(int c)和isgraph(int c)

      判断 c 是否 为可打印字符(包括空格),而 isgraph(int c) 则排除空格,用于控制输出格式。

        isprint( int c)和isgraph( int c )

        判断 c 是否 为可打印字符(包括空格),而 isgraph(int c) 则排除空格,用于控制输出格式。

        是 则返回非0值,否 则返回0;

char a;
if(isprint(a)) //判断字符a是否为可打印字符(包括空格)printf("a是可打印字符(包括空格)");
}
else
{printf("a不是可打印字符(包括空格)");
}char a;
if(isgraph(a)) //判断字符a是否为可打印字符(不包括空格)printf("a是可打印字符(不包括空格)");
}
else
{printf("a不是可打印字符(不包括空格)");
}

用于控制输出格式。

 二、字符转换函数


1.  tolower(int c)

 将大写字母转换为小写字母,若`c`不是大写字母则返回原值。


   将大写字母转换为小写字母,若`c`不是大写字母则返回原值。

char c = A;
char c = tolower(c); // 将 A 转换成 a

统一用户名格式时使用。

2. toupper(int c)

 将小写字母转换为大写字母,若 'c' 非小写字母时返回原值。


   将小写字母转换为大写字母,若 'c' 非小写字母时返回原值。

char c = a;
char c = toupper(c); // 将 a 转换成 A

适用于生成统一格式的字符串。

 三、应用场景


- 输入验证:如使用 isdigit 确保用户输入的是数字,或 isalpha 限制只能输入字母。
- 字符串处理:通过 tolower / toupper 统一字符串大小写,或利用 isspace 分割单词。
- 数据解析:例如用 isxdigit 解析十六进制颜色代码,或 ispunct 过滤标点符号。

 四、注意事项


- 参数范围:传入的`int`值需在`0-255`或`EOF`范围内,否则可能导致未定义行为。
- 本地化影响:
部分函数(如 isspace)的行为可能受本地化设置影响,需注意跨平台兼容性。

通过合理使用这些函数,可以避免手动编写字符判断逻辑,提升代码的可读性和可维护性。

相关文章:

C/C++中对字符处理的常用函数

C语言中的 ctype.h 头文件提供了一系列字符分类和转换函数,用于高效处理字符相关操作。这些函数通过接受 int 类型参数(需为 unsigned char 或 EOF (-1)值),返回非零值表示条件正确,返回0表示错…...

SqlServer数据库报错紧急或可疑无法访问的修复过程,亲测有效。

当 SQL Server 数据库被标记为 SUSPECT 状态时,表示数据库可能由于事务日志损坏、数据文件丢失或其他严重问题而无法正常启动。以下是一个详细的恢复步骤,基于搜索结果中的信息和常见的最佳实践: 恢复步骤 1. 确认数据库状态 将database-n…...

vue3实现虚拟滚动Vue-Virtual-Scroller

前端优化不可不避的一谈之虚拟滚动:众所周知,滚动是直挺挺的往dom树加东西,如果滚太多滚到万级,渲染过多就会卡顿,而vue-virtual-scroll的灵活懒渲染就能解决这个问题 1,下载与配置 npm install --save v…...

DAY33 贪心算法Ⅱ

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 想到把整体利润分解为每天的利润&#xff0c;就豁然开朗了。 class Solution { public:int maxProfit(vector<int>& prices) {int result0;for(int i1;i<prices.size();i){resultmax(0,pric…...

C#核心笔记——(五)框架概述

.NET Ftamework中几乎所有功能都是通过大量的托管类型提供的。这些类型组织在层次化的命名空间中&#xff0c;并打包为一套程序集&#xff0c;与CLR一起构成了.NET平台。 有些.NET类型是由CLR直接使用的&#xff0c;且对于托管宿主环境而言是必不可少的。这些类型位于一个名为…...

HttpMediaTypeNotAcceptableException报错解决,状态码显示为406

当返回类没有添加 getter 和 setter 方法时出现 HTTP 406 错误&#xff08;Not Acceptable&#xff09;&#xff0c;主要与 Spring 框架处理响应数据的机制以及消息转换器的工作原理有关 &#xff08;注意前提&#xff0c;你已经添加了json相关库的依赖&#xff09; 消息转换器…...

网络DNS怎么更改?

访问速度慢或某些网站无法打开?改变网络DNS设置可能会帮助解决这些问题。本文将详细介绍如何更改网络DNS&#xff0c;包括更改的原因、具体步骤。 一、为什么要更改DNS? 更改DNS的原因有很多&#xff0c;以下是一些主要的考虑因素&#xff1a;某些公共DNS服务器的响应速度比…...

【python-uiautomator2】手机上的ATX应用界面报错问题处理:无法提供服务,非am instrument启动

目录 一、前期准备 1.1 插入设备 1.2 安装atx-agent 二、解决报错&#xff1a;无法提供服务&#xff0c;非am instrument启动 2.1 出现报错 2.2 尝试解决 2.3 最终解决 三、开启ATX的悬浮窗权限 一、前期准备 1.1 插入设备 本地插入待执行设备&#xff0c;待执行设备…...

子母钟系统,京准电子科技助力高考精准计时

子母钟系统&#xff0c;京准电子科技助力高考精准计时 子母钟系统&#xff0c;京准电子科技助力高考精准计时 【摘要】子母钟系统又叫网络时钟系统是校园网络中一个重要的精准计时系统&#xff0c;随着网络的普及&#xff0c;许多校园都建了自己的校园专网&#xff0c;使用的…...

大模型中的剪枝、蒸馏是什么意思?

环境&#xff1a; 剪枝 蒸馏 问题描述&#xff1a; 大模型中的剪枝、蒸馏是什么意思&#xff1f; 解决方案&#xff1a; 大模型的剪枝&#xff08;Pruning&#xff09;和蒸馏&#xff08;Distillation&#xff09;是两种常见的模型优化技术&#xff0c;用于减少模型的大小…...

深度解析:主流大模型与智能体框架能力对比及实战指南

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 一、技术演进全景图二、主流大模型能力矩阵1. 闭源模型对比2. 开源模型对比 三、智能体框架深…...

Linux中的基本指令(下)

目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上&#xff01; mv指令 m…...

关于矢量数据集图表

ui.Chart.feature.byFeature 函数 ui.Chart.feature.byFeature 是 Google Earth Engine (GEE) 中的一个函数&#xff0c;用于创建图表以可视化 FeatureCollection 中各个特征&#xff08;features&#xff09;的属性。它通常生成一个分组柱状图&#xff0c;其中&#xff1a; …...

第十七:go 反射

fmt.printf("%T"&#xff0c;obj) // 打印 reflect 的类型 fmt.Printf("%T", obj) // *reflect.rtype //打印的是一个指针类型 reflect包 在Go语言中反射的相关功能由内置的reflect包提供&#xff0c;任意接口值在反射中都可以理解为由reflect.Type和…...

3-002: MySQL 中使用索引一定有效吗?如何排查索引效果?

1. 索引失效的常见原因 虽然索引可以加速查询&#xff0c;但在某些情况下&#xff0c;MySQL 可能不会使用索引&#xff0c;甚至使用索引反而更慢。 以下是一些常见导致索引失效的原因&#xff1a; ① 查询条件使用了 ! 或 <> 原因&#xff1a;索引通常用于范围或等值查…...

【RabbitMQ】Spring Boot 结合 RabbitMQ 完成应用间的通信

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【中间件】企业级中间件剖析 Spring 框架与 RabbitMQ 的整合主要通过 Spring AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;模块实现&#xff0c;提供了便捷的消息队列开发能力。 引…...

Pytorch系列教程:可视化Pytorch模型训练过程

深度学习和理解训练过程中的学习和进步机制对于优化性能、诊断欠拟合或过拟合等问题至关重要。将训练过程可视化的过程为学习的动态提供了有价值的见解&#xff0c;使我们能够做出合理的决策。训练进度必须可视化的两种方法是&#xff1a;使用Matplotlib和Tensor Board。在本文…...

electron+vue+webview内嵌网页并注入js

vue内嵌网页可以使用iframe实现内嵌网页&#xff0c;但是只能通过postMessage间接通信&#xff0c;在electron环境下&#xff0c;vue可以直接使用webview来内嵌网页&#xff0c;支持 executeJavaScript、postMessage、send 等丰富的通信机制。 使用 webview的优势 性能更佳&…...

利用OpenResty拦截SQL注入

需求 客户的一个老项目被相关部门检测不安全&#xff0c;报告为sql注入。不想改代码&#xff0c;改项目&#xff0c;所以想到利用nginx去做一些数据校验拦截。也就是前端传一些用于sql注入的非法字符或者数据库的关键字这些&#xff0c;都给拦截掉&#xff0c;从而实现拦截sql…...

CAD文件转换为STL

AutoCAD与STL格式简介 AutoCAD软件是由美国欧特克有限公司&#xff08;Autodesk&#xff09;出品的一款自动计算机辅助设计软件&#xff0c;可以用于绘制二维制图和基本三维设计&#xff0c;通过它无需懂得编程&#xff0c;即可自动制图&#xff0c;因此它在全球广泛使用&…...

78_Pandasagg()和aggregate()的用法

78_Pandasagg()和aggregate()的用法 通过使用pandas.DataFrame和Series的agg()或aggregate()方法&#xff0c;可以对行或列同时应用多个操作进行聚合。agg()是aggregate()的别名&#xff0c;二者用法相同。 pandas.DataFrame.agg — pandas 2.1.3 文档 pandas.Series.agg —…...

QT:串口上位机

创建工程 布局UI界面 设置名称 设置数据 设置波特率 波特率默认9600 设置数据位 数据位默认8 设置停止位 设置校验位 调整串口设置、接收设置、发送设置为Group Box 修改配置 QT core gui serialport 代码详解 mianwindow.h 首先在mianwindow.h当中定义一个串口指…...

C++跨平台开发环境搭建全指南:工具链选型与性能优化实战

C跨平台开发环境搭建全指南&#xff1a;工具链选型与性能优化实战 目录 开发环境搭建工具链选型性能优化实战常见问题排查 开发环境搭建 操作系统环境准备 Windows# 安装Visual Studio Build Tools choco install visualstudio2022buildtools choco install cmake --instal…...

数据批处理(队列方式)

数据批处理&#xff08;队列方式&#xff09; public class DataProcessor {private static final int THREAD_COUNT 4;private static final int QUEUE_SIZE 10;private LinkedBlockingQueue<Data> queue new LinkedBlockingQueue<>(QUEUE_SIZE);public DataP…...

win32汇编环境,网络编程入门之二

;运行效果 ;win32汇编环境,网络编程入门之二 ;本教程在前一教程的基础上&#xff0c;研究一下如何得到服务器的返回的信息 ;正常的逻辑是连接上了&#xff0c;然后我发送什么&#xff0c;它返回什么&#xff0c;但是这有一个很尴尬的问题。 ;就是如何表现出来。因为网络可能有延…...

MATLAB—从入门到精通的第二天

在第一天的学习中&#xff0c;我们掌握了 MATLAB 的安装配置、基础语法、变量管理和运算符的使用。本文将深入讲解 控制结构&#xff08;嵌套 if、switch&#xff09;、循环类型 和 向量操作&#xff0c;帮助读者进一步掌握 MATLAB 的核心编程技能。 1. 条件语句进阶 1.1 嵌套…...

【认识OpenThread协议】

OpenThread 是一种基于 IPv6 、IEEE 802.15.4 标准的低功耗无线 Mesh 网络协议&#xff0c;主要用于智能家居、物联网设备等场景。它的设计目标是实现设备之间的高效通信、低功耗运行和高可靠性。 OpenThread官方文档 ① 特性 低功耗: 适合电池供电的设备。 Mesh 网络: 支持多…...

驱动开发系列46 - Linux 显卡KMD驱动代码分析(七)- 显存管理

目录 一:概述 二:应用程序和UMD调用栈 三:KMD 显存分配和和映射过程 一:概述 显存管理是图形驱动程序中至关重要的一部分,涉及到从用户空间(UMD,User Mode Driver)到内核空间(KMD,Kernel Mode Driver)的显存分配和管理。本文将首先梳理从一个 OpenGL 应…...

MATLAB代码开发实战:从入门到高效应用

一、MATLAB生态系统的核心优势 &#xff08;扩展原有内容&#xff0c;增加行业数据&#xff09; MATLAB在全球工程领域的市场占有率已达67%&#xff08;2024年IEEE统计&#xff09;&#xff0c;其核心优势体现在&#xff1a; 矩阵运算速度比传统编程快3-5倍包含22个专业工具箱…...

为什么 NFS 不适合作为 TDengine 的数据存储

NFS NFS 是一种分布式文件系统&#xff0c;允许多台计算机通过网络共享文件。其具有以下优点&#xff1a; 共享存储: 多个数据库实例可以共享同一个 NFS 目录&#xff0c;适合分布式数据库或集群环境。灵活性: 数据存储可以集中管理&#xff0c;便于备份和迁移。成本低: 利用…...