当前位置: 首页 > 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.lryc.cn/news/625303.html

相关文章:

  • 在Qt中使用PaddleOCR进行文本识别
  • ubuntu24.04 用apt安装的mysql修改存储路径(文件夹、目录)
  • Vue2+Vue3前端开发_Day1
  • 当宠物机器人装上「第六感」:Deepoc 具身智能如何重构宠物机器人照看逻辑
  • Ubuntu22.04安装docker最新教程,包含安装自动脚本
  • 雷卯针对香橙派Orange Pi 3 LTS开发板防雷防静电方案
  • 在 Windows 上使用 Kind 创建本地 Kubernetes 集群并集成Traefik 进行负载均衡
  • Linux下Nginx安装及负载均衡配置
  • pytest高级用法之插件开发
  • Docker核心---数据卷(堵门秘籍)
  • RxJava 在 Android 即时通讯中的应用:封装、处理与控制
  • OpenHarmony之打造全场景智联基座的“分布式星链 ”WLAN子系统
  • (第五篇)spring cloud之Ribbon负载均衡
  • C语言实战:从零开始编写一个通用配置文件解析器
  • 常见的 Bash 命令及简单脚本
  • 量子计算和超级计算机将彻底改变技术
  • 记录Webapi Excel 导出
  • 【qml-4】qml与c++交互(类型多例)
  • 【CPP】一个CPP的Library(libXXXcore)和测试程序XXX_main的Demo
  • kkfileview预览Excel文件去掉左上角的跳转HTM预览、打印按钮
  • Spring Boot 全局异常处理
  • JVM参数优化
  • 《算法导论》第 29 章 - 线性规划
  • Matplotlib数据可视化实战:Matplotlib子图布局与管理入门
  • Day10--滑动窗口与双指针--2875. 无限数组的最短子数组,76. 最小覆盖子串,632. 最小区间
  • Hugging Face 核心组件介绍
  • 【牛客刷题】岛屿数量问题:BFS与DFS解法深度解析
  • Git的初步学习
  • 系统架构设计师-操作系统-避免死锁最小资源数原理模拟题
  • git 创用操作