解锁 C 语言字符函数密码,开启高效编程之路
文章目录
- 一、字符函数的构成
- 二、字符函数的分类
- 1、字符分类函数
- 1、`isalnum`函数
- 2、`isalpha`函数
- 3、`isdigit`函数
- 4、`islower`函数
- 5、`isupper`函数
- 6、`ispunct`函数
- 7、`isspace`函数
- 8、`iscntrl`函数
- 9、`isxdigit`函数
- 10、`isgraph`函数
- 11、`isprint`函数
- 2、字符转换函数
- 三、字符函数的应用
一、字符函数的构成
- 头文件包含:在C语言中,许多字符函数都需要包含
<ctype.h>
头文件。这个头文件包含了一系列用于处理字符的函数原型声明。例如,#include <ctype.h>
是使用字符函数的常见开头步骤。 - 函数参数和返回值:字符函数通常以单个字符作为参数,返回值根据函数的功能而定。例如,
int isalpha(int c)
函数接受一个整数参数c
(实际上是一个字符的ASCII码值),如果c
是一个字母(大写或小写),则返回一个非零值(真),否则返回0(假)。
二、字符函数的分类
1、字符分类函数
1、isalnum
函数
- 作用:用于判断一个字符是否为字母或数字。字母包括大写字母(
A - Z
)和小写字母(a - z
),数字是0 - 9
。 - 函数原型:
int isalnum(int c);
,其中c
是要测试的字符(以ASCII码值的形式传递)。 - 返回值:如果
c
是字母或数字,返回非零值(在C语言中,非零值表示真);如果c
不是字母或数字,返回0(表示假)。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = 'A';char ch2 = '7';char ch3 = '$';if (isalnum(ch1)){printf("%c是字母或数字\n", ch1);}if (isalnum(ch2)){printf("%c是字母或数字\n", ch2);}if (!isalnum(ch3)){printf("%c不是字母或数字\n", ch3);}return 0; }
A是字母或数字 7是字母或数字 $不是字母或数字
2、isalpha
函数
- 作用:专门用于判断一个字符是否为字母,包括大写字母(
A - Z
)和小写字母(a - z
)。 - 函数原型:
int isalpha(int c);
。 - 返回值:如果
c
是字母,返回非零值;如果c
不是字母,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = 'b';char ch2 = '9';if (isalpha(ch1)){printf("%c是字母\n", ch1);}if (!isalpha(ch2)){printf("%c不是字母\n", ch2);}return 0; }
b是字母 9不是字母
3、isdigit
函数
- 作用:判断一个字符是否为数字,即
0 - 9
。 - 函数原型:
int isdigit(int c);
。 - 返回值:如果
c
是数字,返回非零值;如果c
不是数字,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = '4';char ch2 = 'a';if (isdigit(ch1)){printf("%c是数字\n", ch1);}if (!isdigit(ch2)){printf("%c不是数字\n", ch2);}return 0; }
4是数字 a不是数字
4、islower
函数
- 作用:用于判断一个字符是否为小写字母,范围是
a - z
。 - 函数原型:
int islower(int c);
。 - 返回值:如果
c
是小写字母,返回非零值;如果c
不是小写字母,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = 'm';char ch2 = 'N';if (islower(ch1)){printf("%c是小写字母\n", ch1);}if (!islower(ch2)){printf("%c不是小写字母\n", ch2);}return 0; }
m是小写字母 N不是小写字母
5、isupper
函数
- 作用:判断一个字符是否为大写字母,范围是
A - Z
。 - 函数原型:
int isupper(int c);
。 - 返回值:如果
c
是大写字母,返回非零值;如果c
不是大写字母,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = 'Q';char ch2 = 'r';if (isupper(ch1)){printf("%c是大写字母\n", ch1);}if (!isupper(ch2)){printf("%c不是大写字母\n", ch2);}return 0; }
Q是大写字母 r不是大写字母
6、ispunct
函数
- 作用:用于判断一个字符是否为标点符号。标点符号包括各种非字母数字且有特定语法功能的字符,如
!
、@
、#
、$
、%
、^
、&
、*
、(
、)
、-
、+
、=
、{
、}
、[
、]
、:
、;
、'
、"
、<
、>
、?
、/
、|
、\
、~
等。 - 函数原型:
int ispunct(int c);
。 - 返回值:如果
c
是标点符号,返回非零值;如果c
不是标点符号,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = ';';char ch2 = 'A';if (ispunct(ch1)){printf("%c是标点符号\n", ch1);}if (!ispunct(ch2)){printf("%c不是标点符号\n", ch2);}return 0; }
;是标点符号 A不是标点符号
7、isspace
函数
- 作用:判断一个字符是否为空白字符。空白字符包括空格(
' '
)、制表符('\t'
)、换行符('\n'
)、回车符('\r'
)、垂直制表符('\v'
)和换页符('\f'
)。 - 函数原型:
int isspace(int c);
。 - 返回值:如果
c
是空白字符,返回非零值;如果c
不是空白字符,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = '\n';char ch2 = 'a';if (isspace(ch1)){printf("%c是空白字符\n", ch1);}if (!isspace(ch2)){printf("%c不是空白字符\n", ch2);}return 0; }
是空白字符 a不是空白字符
8、iscntrl
函数
- 作用:用于判断一个字符是否为控制字符。控制字符是ASCII码值在0 - 31和127的字符,这些字符主要用于控制设备(如打印机、终端等)执行特定的操作,例如换行(
\n
)、回车(\r
)等也属于控制字符,但要注意空格(' '
)不是控制字符。 - 函数原型:
int iscntrl(int c);
,这里c
是要测试的字符(以ASCII码值的形式传递)。 - 返回值:如果
c
是控制字符,返回非零值;如果c
不是控制字符,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = '\n';char ch2 = 'A';if (iscntrl(ch1)){printf("%c是控制字符\n", ch1);}if (!iscntrl(ch2)){printf("%c不是控制字符\n", ch2);}return 0; }
是控制字符 A不是控制字符
9、isxdigit
函数
- 作用:判断一个字符是否为十六进制数字字符。十六进制数字包括0 - 9、A - F(或a - f)。
- 函数原型:
int isxdigit(int c);
。 - 返回值:如果
c
是十六进制数字字符,返回非零值;如果c
不是十六进制数字字符,返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = 'F';char ch2 = 'G';if (isxdigit(ch1)){printf("%c是十六进制数字字符\n", ch1);}if (!isxdigit(ch2)){printf("%c不是十六进制数字字符\n", ch2);}return 0; }
F是十六进制数字字符 G不是十六进制数字字符
10、isgraph
函数
- 作用:用于判断一个字符是否为可打印字符(除空格外)。可打印字符的ASCII码值范围通常是33 - 126。
- 函数原型:
int isgraph(int c);
。 - 返回值:如果
c
是可打印字符(非空格),返回非零值;如果c
不是可打印字符(非空格),返回0。 - 示例代码:
#include <stdio.h> #include <ctype.h> int main() {char ch1 = '!';char ch2 = ' ';if (isgraph(ch1)){printf("%c是可打印字符(非空格)\n", ch1);}if (!isgraph(ch2)){printf("%c不是可打印字符(非空格)\n", ch2);}return 0; }
输出结果为:
```
!是可打印字符(非空格)不是可打印字符(非空格)```
11、isprint
函数
- 作用:判断一个字符是否为可打印字符,包括空格。可打印字符的ASCII码值范围通常是32 - 126。
- 函数原型:
int isprint(int c);
。 - 返回值:如果
c
是可打印字符(包括空格),返回非零值;如果c
不是可打印字符(包括空格),返回0。 - 示例代码:
输出结果为:#include <stdio.h> #include <ctype.h> int main() {char ch1 = ' ';char ch2 = '\n';if (isprint(ch1)){printf("%c是可打印字符(包括空格)\n", ch1);}if (!isprint(ch2)){printf("%c不是可打印字符(包括空格)\n", ch2);}return 0; }
是可打印字符(包括空格) 不是可打印字符(包括空格)
2、字符转换函数
- **功能**:将字符从一种形式转换为另一种形式。- **举例**:- `tolower(c)`:将大写字母`c`转换为小写字母。如果`c`不是大写字母,则返回`c`本身。- 例如,`char ch = 'A'; ch = tolower(ch);`之后,`ch`的值变为`'a'`。- `toupper(c)`:与`tolower`相反,将小写字母转换为大写字母。- 例如,`char ch = 'b'; ch = toupper(ch);`后,`ch`的值变为`'B'`。
三、字符函数的应用
-
数据验证
- 举例:在用户输入密码的程序中,可以使用
isdigit
和isalpha
函数来验证密码是否包含字母和数字。#include <stdio.h> #include <ctype.h> int main() {char password[20];printf("请输入密码:");scanf("%s", password);int hasAlpha = 0, hasDigit = 0;for (int i = 0; password[i]!= '\0'; i++){if (isalpha(password[i])){hasAlpha = 1;}if (isdigit(password[i])){hasDigit = 1;}}if (hasAlpha && hasDigit){printf("密码格式正确\n");}else{printf("密码必须包含字母和数字\n");}return 0; }
- 举例:在用户输入密码的程序中,可以使用
-
文本处理
- 举例:将一段文本中的所有大写字母转换为小写字母。
输出结果为“hello, world!”。#include <stdio.h> #include <ctype.h> int main() {char text[] = "Hello, WORLD!";for (int i = 0; text[i]!= '\0'; i++){text[i] = tolower(text[i]);}printf("%s\n", text);return 0; }
- 举例:将一段文本中的所有大写字母转换为小写字母。
-
字符加密与解密(简单示例)
- 举例:可以使用字符转换函数进行简单的加密,比如将文本中的每个字母向后移动一位(凯撒密码的简单形式)。
输出为“BCD”,这里将字母#include <stdio.h> #include <ctype.h> int main() {char message[] = "abc";for (int i = 0; message[i]!= '\0'; i++){if (isalpha(message[i])){message[i] = toupper(message[i]);message[i] = ((message[i] - 'A') + 1) % 26 + 'A';}}printf("%s\n", message);return 0; }
a
转换为A
后,按照凯撒密码的规则将其ASCII码值加1进行加密。
- 举例:可以使用字符转换函数进行简单的加密,比如将文本中的每个字母向后移动一位(凯撒密码的简单形式)。
相关文章:
解锁 C 语言字符函数密码,开启高效编程之路
文章目录 一、字符函数的构成二、字符函数的分类1、字符分类函数1、isalnum函数2、isalpha函数3、isdigit函数4、islower函数5、isupper函数6、ispunct函数7、isspace函数8、iscntrl函数9、isxdigit函数10、isgraph函数11、isprint函数 2、字符转换函数 三、字符函数的应用 一、…...

LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库
一、必备条件: python语言Neo4j数据库python库:neo4j、llmsherpa、glob、dotenv 二、代码: from llmsherpa.readers import LayoutPDFReaderfrom neo4j import GraphDatabaseimport uuidimport hashlibimport osimport globfrom datetime …...
力扣-数组-01两数之和
解析 遍历i和第i1,两个for循环查就可以,时间复杂度是 代码 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> ansewer;bool flag false;for(int i 0;i < nums.size(); i){for(in…...

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存
Flutter中的网络请求图片存储为缓存,与定制删除本地缓存 1:封装请求图片函数 2:访问的图片都会转为本地缓存,当相同的请求url,会在本地调用图片 3:本地缓存管理【windows与andriod已经测试】【有页面】【有…...

保障移动应用安全:多层次安全策略应对新兴威胁
在数字化时代,移动应用的安全问题变得越来越重要。随着网络威胁的不断升级,确保移动应用的安全性不仅是保护敏感数据的关键,也是维护用户信任的基础。为了应对复杂的安全挑战,企业必须采取先进的技术和多层次的安全策略࿰…...

【Linux】函数
一、函数 1、创建函数 如果定义了同名函数,则新定义的函数就会覆盖原先的定义的函数,而且在运行时不会报错。 创建函数的语法: 方法1:使用关键字function function name { commands } shell脚本中的函数名不能重复 方法2&#x…...
Maven中管理SNAPSHOT版本含义及作用
在开发过程中突然产生了一个疑问:IDEA中 maven deploy的依赖包的版本号,比如 1.0.0-SNAPSHOT是在哪配置的?在远程仓库中的版本和这个有关系吗 ? 在 Maven 中,-SNAPSHOT 后缀是用于标识项目版本为快照(Snapshot…...

win10 VS2019上libtorch库配置过程
win10 VS2019上libtorch库配置过程 0 引言1 获取libtorch2 在VS上配置使用libtorch库3 结语 0 引言 💻💻AI一下💻💻 libtorch库是一个用于深度学习的C库,是PyTorch的官方C前端。它提供了用于构建和训练深度学习模…...

【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1.了解交换机的管理方式。 2.掌握通过Console接口对交换机进行配置的方法。 3.掌握交换机命令行各种模式的区别,能够使用各种帮助信息以及命令进行基本的配置。 4&…...
Oracle Dataguard(主库为单节点)配置详解(4):将主库复制到备库并启动同步
Oracle Dataguard(主库为单节点)配置详解(4):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为单节点)配置详解(4):将主库复制到备库并启动同步一、…...

OpenCL(贰):浅析CL内核程序接口函数
目录 1.前言 2.获取平台信息 1.cl_int类型 2.cl_platform_id类型 3.clGetPlatformIDs():查询系统OpenCL平台数量或获取具体的平台信息 4.clGetPlatformInfo():查询指定OpenCL平台的信息,例如平台名称、供应商、版本等 3.设置OpenCL上下文…...
Leetcode 3407. Substring Matching Pattern
Leetcode 3407. Substring Matching Pattern 1. 解题思路2. 代码实现 题目链接:3407. Substring Matching Pattern 1. 解题思路 这一题是一道leetcode easy的题目,照说应该没啥的,不过实际我做的时候在这里卡了一下,所以还是拿…...

学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用
📢📢📢:先看关键单词,再看英文,最后看中文总结,再回头看一遍英文原文,效果更佳!! 关键词 Functional Testing功能测试[ˈfʌŋkʃənəl ˈtɛstɪŋ]Sample样…...

Vue笔记-001-声明式渲染
https://cn.vuejs.org/tutorial/#step-2https://cn.vuejs.org/tutorial/#step-2 Vue 单文件组件 (Single-File Component,缩写为 SFC) 单文件组件是一种可复用的代码组织形式,它将从属于同一个组件的 HTML、CSS 和 JavaScript 封装在使用 .vue 后缀的文件…...
26考研资料分享 百度网盘
26考研资料分享考研资料合集 百度网盘(仅供参考学习) 基础班: 通过网盘分享的文件:2026【考研英语】等3个文件 链接: https://pan.baidu.com/s/1Q6rvKop3sWiL9zBHs87kAQ?pwd5qnn 提取码: 5qnn --来自百度网盘超级会员v3的分享…...
.NET 8 + Ocelot + Consul 实现代理网关、服务发现
.NET 8 Ocelot Consul 实现代理网关、服务发现 本文环境:.NET 8 Ocelot 23.4.2 Consul 1.7.14.6 1 实现网关 分别创建3个WebApi工程:OcelotGw、TestGwAService、TestGwBService;在OcelotGw工程中安装Ocelot包:Install-Packag…...
使用 Nginx 轻松处理跨域请求(CORS)
使用 Nginx 轻松处理跨域请求(CORS) 在现代 Web 开发中,跨域资源共享(CORS)是一种重要的机制,用于解决浏览器的同源策略限制。CORS 允许服务器声明哪些来源可以访问其资源,从而确保安全性与可用…...

【LeetCode Hot100 二分查找】搜索插入位置、搜索二维矩阵、搜索旋转排序数组、寻找两个正序数组的中位数
二分查找 搜索插入位置搜索二维矩阵在排序数组中查找元素的第一个和最后一个位置寻找旋转排序数组中的最小值搜索旋转排序数组寻找两个正序数组的中位数(hard) 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并…...
使用MediaPipe Face Mesh 面部动作检测
一、技术选型 OpenCV(Open Source Computer Vision Library) 用于视频流捕捉、图像预处理和基本图像处理操作。 MediaPipe 提供高效的人脸检测与关键点提取功能(Face Mesh)。 Python 作为后端开发语言,整合上述库进行…...
【Vue】<script setup>和 <script>区别是什么?在使用时的写法区别?
<script setup> 是 Vue 3 引入的一种新的脚本语法,它提供了一种更简洁和声明式的方式来编写组件逻辑。它是为了解决传统 <script> 标签在 Vue 单文件组件(SFC)中的一些局限性而设计的。 <script setup> 与 <script>…...
Java泛型中的通配符详解
无界通配符 通配符的必要性 通过WrapperUtil类的示例可以清晰展示通配符的使用场景。假设我们需要为Wrapper类创建一个工具类WrapperUtil,其中包含一个静态方法printDetails(),该方法需要处理任意类型的Wrapper对象。最初的实现尝试如下: …...

【C++进阶篇】C++11新特性(下篇)
C函数式编程黑魔法:Lambda与包装器实战全解析 一. lambda表达式1.1 仿函数使用1.2 lambda表达式的语法1.3 lambda表达式使用1.3.1 传值和传引用捕捉1.3.2 隐式捕捉1.3.3 混合捕捉 1.4 lambda表达式原理1.5 lambda优点及建议 二. 包装器2.1 function2.2 bind绑定 三.…...
[c#]判定当前软件是否用管理员权限打开
有时一些软件的逻辑中需要使用管理员权限对某些文件进行修改时,那么该软件在执行或者打开的场合,就需要用使用管理员身份运行才能达到效果。那么在c#里,如何判定该软件是否是对管理员身份运的呢? 1.取得当前的windows用户。 2.取得…...
跟我学c++中级篇——理解类型推导和C++不同版本的支持
一、类型推导 在前面反复分析过类型推导(包括前面提到的类模板参数推导CTAD),类型推导其实就是满足C语言这种强类型语言的要求即编译期必须确定对象的数据类型。换一句话说,理论上如果编译器中能够自动推导所有的相关数据类型&am…...
https相比http的区别
https相比http的区别 https相比http的区别在于:https使用了SSL/TLS加密协议,确保数据传输的安全性和完整性,通信时需要证书验证。 https相比于http的区别主要在于安全性。https使用SSL/TLS加密传输数据,确保数据在客户端和服务器之间的通信…...
【PmHub面试篇】性能监控与分布式追踪利器Skywalking面试专题分析
你好,欢迎来到本次关于PmHub整合性能监控与分布式追踪利器Skywalking的面试系列分享。在这篇文章中,我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解,强烈推荐参考之前发布的博文:【PmHub后端篇】Skyw…...
C#封装HttpClient:HTTP请求处理最佳实践
C#封装HttpClient:HTTP请求处理最佳实践 在现代的.NET应用程序开发中,与外部服务进行HTTP通信是一项常见需求。HttpClient作为.NET框架中处理HTTP请求的核心组件,为我们提供了强大而灵活的API。然而,直接使用原生的HttpClient可能…...

Playwright 测试框架 - .NET
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】...

【递归、搜索与回溯】综合练习(四)
📝前言说明: 本专栏主要记录本人递归,搜索与回溯算法的学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码…...
Spring Boot-面试题(52)
摘要: 1、通俗易懂,适合小白 2、仅做面试复习用,部分来源网络,博文免费,知识无价,侵权请联系! 1. 什么是 Spring Boot 框架? Spring Boot 是基于 Spring 框架的快速开发框架&#…...