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

字符分类函数与字符转换函数

目录

一、概述

二、常用字符分类函数及示例

1、islower() - 判断是否为小写字母

功能描述

函数原型

参数说明

返回值

使用说明

2、isupper() - 判断是否为大写字母

功能描述

函数原型

参数说明

返回值

使用说明

3、isdigit() - 判断是否为十进制数字

功能描述

函数原型

参数说明

返回值

使用说明

4、isalpha() - 判断是否为字母

功能描述

函数原型

参数说明

返回值

使用说明

5、isalnum() - 判断是否为字母或数字

功能描述

函数原型

参数说明

返回值

使用说明

6、isspace() - 判断是否为空白字符

功能描述

函数原型

参数说明

返回值

空白字符包括

使用说明

7、ispunct() - 判断是否为标点符号

功能描述

函数原型

参数说明

返回值

标点符号的定义

使用说明

8、isxdigit() - 判断是否为十六进制数字

功能描述

函数原型

参数说明

返回值

有效的十六进制数字字符包括

使用说明

9、isgraph() - 判断是否为图形字符

功能描述

函数原型

参数说明

返回值

图形字符的定义

使用说明

10、isprint() - 判断是否为可打印字符

功能描述

函数原型

参数说明

返回值

可打印字符的范围

使用说明

11、iscntrl() - 判断是否为控制字符

功能描述

函数原型

参数说明

返回值

控制字符的范围

使用说明

三、综合应用示例

统计字符串中各类字符数量

四、字符转换函数

1、int tolower(int c);

2、int toupper(int c);

使用示例:

程序说明:

注意事项:


一、概述

        C语言提供了一系列字符分类函数,用于判断一个字符属于哪种类型。这些函数都定义在ctype.h头文件中,它们接受一个int类型参数(字符的ASCII码),并返回一个整数值表示判断结果(非0表示真,0表示假)。


二、常用字符分类函数及示例

1、islower() - 判断是否为小写字母

功能描述

    islower() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为小写字母(a-z)。

函数原型

int islower(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个小写字母(a-z)

  • 0:如果 c 不是小写字母

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数只对小写字母 a-z 返回真值

  3. 对于其他任何字符(包括大写字母、数字、标点符号等)都返回 0

#include <stdio.h>
#include <ctype.h>int main() {char str[] = "Hello World 123!";int i = 0;while (str[i]) {if (islower(str[i])) {printf("'%c' is a lowercase letter\n", str[i]);}i++;}return 0;
}

2、isupper() - 判断是否为大写字母

功能描述

    isupper() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为大写字母(A-Z)。

函数原型

int isupper(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个大写字母(A-Z)

  • 0:如果 c 不是大写字母

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数只对大写字母 A-Z 返回真值

  3. 对于其他任何字符(包括小写字母、数字、标点符号等)都返回 0

#include <stdio.h>
#include <ctype.h>int main() {char c = 'A';if (isupper(c)) {printf("'%c' is an uppercase letter\n", c);} else {printf("'%c' is not an uppercase letter\n", c);}return 0;
}

3、isdigit() - 判断是否为十进制数字

功能描述

    isdigit() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为十进制数字字符(0-9)。

函数原型

int isdigit(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个十进制数字字符(0-9)

  • 0:如果 c 不是十进制数字字符

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数只对数字字符 0-9 返回真值

  3. 对于其他任何字符(包括字母、标点符号、空白字符等)都返回 0

  4. 注意与 isxdigit() 的区别:isdigit() 只识别 0-9,而 isxdigit() 还识别 a-f 和 A-F

#include <stdio.h>
#include <ctype.h>int main() {char input[] = "Year 2023";int digit_count = 0;for (int i = 0; input[i]; i++) {if (isdigit(input[i])) {digit_count++;}}printf("The string contains %d digits\n", digit_count);return 0;
}

4、isalpha() - 判断是否为字母

功能描述

    isalpha() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为字母字符(a-z 或 A-Z)。

函数原型

int isalpha(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个字母字符(a-z 或 A-Z)

  • 0:如果 c 不是字母字符

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数对大小写字母(a-z 和 A-Z)都返回真值

  3. 对于数字、标点符号、空白字符等其他字符都返回 0

  4. 相当于 isupper(c) || islower(c) 的组合效果

#include <stdio.h>
#include <ctype.h>int main() {char ch = 'z';if (isalpha(ch)) {printf("'%c' is an alphabetic character\n", ch);} else {printf("'%c' is not an alphabetic character\n", ch);}return 0;
}

5、isalnum() - 判断是否为字母或数字

功能描述

    isalnum() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为字母(a-z 或 A-Z)或数字(0-9)。

函数原型

int isalnum(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个字母或数字字符

  • 0:如果 c 不是字母或数字字符

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数相当于 isalpha(c) || isdigit(c) 的组合效果

  3. 对于标点符号、空白字符、控制字符等其他字符都返回 0

  4. 常用于验证用户名、密码等只允许包含字母和数字的场合

#include <stdio.h>
#include <ctype.h>int main() {char password[] = "Secure123";int valid = 1;for (int i = 0; password[i]; i++) {if (!isalnum(password[i])) {valid = 0;break;}}if (valid) {printf("Password contains only letters and digits\n");} else {printf("Password contains invalid characters\n");}return 0;
}

6、isspace() - 判断是否为空白字符

功能描述

isspace() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为空白字符。

函数原型

int isspace(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个空白字符

  • 0:如果 c 不是空白字符

空白字符包括

标准空白字符包括:

  • 空格 (' ')

  • 换页符 ('\f')

  • 换行符 ('\n')

  • 回车符 ('\r')

  • 水平制表符 ('\t')

  • 垂直制表符 ('\v')

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数对上述所有空白字符都返回真值

  3. 对于其他任何可见字符都返回 0

  4. 常用于文本处理中的单词分割和格式检查

#include <stdio.h>
#include <ctype.h>int main() {char text[] = "This has\nmultiple\tspaces";int space_count = 0;for (int i = 0; text[i]; i++) {if (isspace(text[i])) {space_count++;}}printf("The string contains %d whitespace characters\n", space_count);return 0;
}

7、ispunct() - 判断是否为标点符号

功能描述

ispunct() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为标点符号字符。

函数原型

int ispunct(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个标点符号字符

  • 0:如果 c 不是标点符号字符

标点符号的定义

标点符号是指所有不属于以下类别的可打印字符:

  • 空白字符(isspace() 返回 true 的字符)

  • 字母字符(isalpha() 返回 true 的字符)

  • 数字字符(isdigit() 返回 true 的字符)

常见的标点符号包括:

! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数对所有标点符号字符返回真值

  3. 对于字母、数字、空白字符和控制字符都返回 0

  4. 常用于文本分析、词法分析和数据清洗

#include <stdio.h>
#include <ctype.h>int main() {char sentence[] = "Hello, world! How are you?";int punct_count = 0;for (int i = 0; sentence[i]; i++) {if (ispunct(sentence[i])) {printf("Found punctuation: '%c'\n", sentence[i]);punct_count++;}}printf("Total punctuation marks: %d\n", punct_count);return 0;
}

8、isxdigit() - 判断是否为十六进制数字

功能描述

    isxdigit() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为有效的十六进制数字字符。

函数原型

int isxdigit(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个有效的十六进制数字字符

  • 0:如果 c 不是有效的十六进制数字字符

有效的十六进制数字字符包括

  1. 十进制数字:'0'-'9'

  2. 小写字母:'a'-'f'

  3. 大写字母:'A'-'F'

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数对上述所有十六进制数字字符返回真值

  3. 常用于处理十六进制字符串、颜色代码、内存地址等场景

  4. 与 isdigit() 的区别:isdigit() 只识别 '0'-'9',而 isxdigit() 还识别 'a'-'f' 和 'A'-'F'

#include <stdio.h>
#include <ctype.h>int main() {char hex[] = "0x1A3f";int valid = 1;for (int i = 2; hex[i]; i++) { // Skip '0x' prefixif (!isxdigit(hex[i])) {valid = 0;break;}}if (valid) {printf("'%s' is a valid hexadecimal number\n", hex);} else {printf("'%s' contains invalid hexadecimal digits\n", hex);}return 0;
}

9、isgraph() - 判断是否为图形字符

功能描述

    isgraph() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为图形字符(即可见字符,不包括空格)。

函数原型

int isgraph(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个图形字符(可见且非空格)

  • 0:如果 c 不是图形字符(包括空格和控制字符)

图形字符的定义

图形字符是指所有满足以下条件的字符:

  1. 是可打印字符(isprint() 返回 true)

  2. 不是空格字符(' '

具体包括:

  • 字母(a-z, A-Z)

  • 数字(0-9)

  • 标点符号(ispunct() 返回 true 的字符)

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数对所有图形字符返回真值

  3. 空格字符(ASCII 32)会返回 false

  4. 常用于文本处理、数据验证和格式化输出

#include <stdio.h>
#include <ctype.h>int main() {char chars[] = {'A', ' ', '\n', '\t', '!'};for (int i = 0; i < 5; i++) {if (isgraph(chars[i])) {printf("'%c' (ASCII %d) is a graphical character\n", chars[i], chars[i]);} else {printf("'%c' (ASCII %d) is not a graphical character\n", chars[i], chars[i]);}}return 0;
}

10、isprint() - 判断是否为可打印字符

功能描述

    isprint() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为可打印字符(包括空格)。

函数原型

int isprint(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个可打印字符(包括空格)

  • 0:如果 c 不是可打印字符(控制字符或不可见字符)

可打印字符的范围

可打印字符包括:

  • 空格字符(ASCII 32)

  • 所有图形字符(isgraph() 返回 true 的字符):

    • 字母(a-z, A-Z)

    • 数字(0-9)

    • 标点符号

    • 其他可见符号

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数对 ASCII 码 32(空格)到 126(~)之间的字符返回真值

  3. 对于控制字符(ASCII 0-31 和 127)返回 false

  4. 常用于文本处理、输入验证和格式化输出

#include <stdio.h>
#include <ctype.h>int main() {char data[] = {'H', '\a', 'i', '\0'};for (int i = 0; data[i]; i++) {if (isprint(data[i])) {printf("'%c' is printable\n", data[i]);} else {printf("Character with ASCII %d is not printable\n", data[i]);}}return 0;
}

11、iscntrl() - 判断是否为控制字符

功能描述

iscntrl() 是 C 语言标准库中的一个字符分类函数,用于判断给定的字符是否为控制字符。

函数原型

int iscntrl(int c);

参数说明

    c:要检测的字符,以 int 形式传递。虽然参数类型是 int,但通常传递的是 char 类型,编译器会自动进行类型转换。

返回值

  • 非零值:如果 c 是一个控制字符

  • 0:如果 c 不是控制字符

控制字符的范围

控制字符包括:

  1. ASCII 码 0x00 (NUL) 到 0x1F (US)

  2. ASCII 码 0x7F (DEL)

  3. 其他实现定义的控制字符

常见的控制字符有:

  • \0 (空字符)

  • \a (响铃)

  • \b (退格)

  • \t (水平制表符)

  • \n (换行符)

  • \v (垂直制表符)

  • \f (换页符)

  • \r (回车符)

使用说明

  1. 需要包含头文件 <ctype.h>

  2. 该函数对所有控制字符返回真值

  3. 对于可打印字符(包括空格)返回 false

  4. 常用于处理二进制数据、终端控制和文本解析

#include <stdio.h>
#include <ctype.h>int main() {char controls[] = {'\n', '\t', '\a', 'A', ' '};for (int i = 0; i < 5; i++) {if (iscntrl(controls[i])) {printf("ASCII %d is a control character\n", controls[i]);} else {printf("ASCII %d ('%c') is not a control character\n", controls[i], controls[i]);}}return 0;
}


三、综合应用示例

统计字符串中各类字符数量

#include <stdio.h>
#include <ctype.h>int main() {char text[] = "Hello World! 123\nThis is a test.\t";int upper = 0, lower = 0, digit = 0, space = 0, punct = 0, other = 0;for (int i = 0; text[i]; i++) {if (isupper(text[i])) upper++;else if (islower(text[i])) lower++;else if (isdigit(text[i])) digit++;else if (isspace(text[i])) space++;else if (ispunct(text[i])) punct++;else other++;}printf("Analysis of the string:\n");printf("Uppercase letters: %d\n", upper);printf("Lowercase letters: %d\n", lower);printf("Digits: %d\n", digit);printf("Whitespace characters: %d\n", space);printf("Punctuation marks: %d\n", punct);printf("Other characters: %d\n", other);return 0;
}

这些字符分类函数在实际编程中非常有用,特别是在文本处理、输入验证和数据分析等场景中。


四、字符转换函数

C语言标准库<ctype.h>提供了两个常用的字符转换函数:

1、int tolower(int c);

  • 功能:将大写字母转换为对应的小写字母

  • 参数:c - 要转换的字符(以int形式传递)

  • 返回值:转换后的小写字母,若参数不是大写字母则返回原字符

2、int toupper(int c);

  • 功能:将小写字母转换为对应的大写字母

  • 参数:c - 要转换的字符(以int形式传递)

  • 返回值:转换后的大写字母,若参数不是小写字母则返回原字符

使用示例:

#include <stdio.h>
#include <ctype.h>int main() {int i = 0;char str[] = "Test String.\n";char c;while (str[i]) {c = str[i];if (islower(c))  // 先判断是否为小写字母c = toupper(c);  // 转换为大写putchar(c);i++;}return 0;
}

程序说明:

  1. 该程序演示了如何将字符串中的小写字母转换为大写字母

  2. 使用islower()函数先判断字符是否为小写字母

  3. 使用toupper()函数进行实际的转换操作

  4. 转换后的字符通过putchar()输出

注意事项:

  • 这些函数只能处理ASCII字符集中的字母字符

  • 对于非字母字符,函数会直接返回原字符

  • 相较于手动加减32的转换方式,使用这些标准函数更具可移植性和安全性

http://www.dtcms.com/a/338837.html

相关文章:

  • 【LeetCode 热题 100】279. 完全平方数——(解法一)记忆化搜索
  • kkfileview预览Excel文件去掉左上角的跳转HTM预览、打印按钮
  • Python爬虫第一课:爬取HTML静态网页小说章节
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + FPGA通信案例
  • PicoShare 文件共享教程:cpolar 内网穿透服务实现跨设备极速传输
  • Simulink库文件创建及使用方法
  • 4.Kotlin 集合 Map 所有方法
  • CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
  • 库卡机器人tag焊接保护气体流量控制系统
  • (第五篇)spring cloud之Ribbon负载均衡
  • 主流 3D 模型格式(FBX/OBJ/DAE/GLTF)材质支持与转换操作指南
  • 云存储的高效安全助手:阿里云国际站 OSS
  • ICCV 2025 | 首个3D动作游戏专用VLA模型,打黑神话只狼超越人类玩家
  • iOS 性能监控实践,如何构建从开发到运维的持续优化体系
  • 面试题储备-MQ篇 3-说说你对Kafka的理解
  • 如何用给各种IDE配置R语言环境
  • Halcon联合C# 添加工具类让winform自动根据窗体大小自适应缩放所有控件
  • 知行社黄剑杰:金融跨界,重塑震区救援新章
  • 《基于大数据的全球用水量数据可视化分析系统》用Python+Django开发,为什么导师却推荐用Java+Spring Boot?真相揭秘……
  • sqli-labs通关笔记-第55关 GET数值型注入(括号闭合 限制14次探测机会)
  • 今日行情明日机会——20250819
  • 20.2 QLoRA微调全局参数实战:高点击率配置模板+显存节省50%技巧
  • Linux下Nginx安装及负载均衡配置
  • Python 3.14深度解析:革命性特性与性能优化实践
  • Go高效复用对象:sync.Pool详解
  • Windows内核开发笔记
  • 免费导航规划API接口详解:调用指南与实战示例
  • 一个基于前端技术的小狗寿命阶段计算网站,帮助用户了解狗狗在不同年龄阶段的特点和需求。
  • 数据链路层-网络层-传输层
  • js 值转换boolean方式