文章目录
前言
在C语言中,除了常用的字符串操作函数外,C 标准库的ctype.h
头文件还提供了一系列字符操作函数,接下来便一一介绍。
字符分类
isblank()
【函数介绍】
判断一个字符是不是空格字符。
C语言标准中规定的空格字符有2个:
字符 | ASCII码值 | 名称 |
---|---|---|
’ ’ | 0x20(32) | space (SPC) 空格符 |
‘\t’ | 0x09(9) | horizontal tab (TAB) 水平制表符 |
【函数声明】
int isblank ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个空格字符,函数返回非0值,否则返回0。
【使用举例】
isspace()
【函数介绍】
判断一个字符是不是空白字符。
C语言标准中规定的空白字符有6个:
字符 | ASCII码值 | 名称 |
---|---|---|
’ ’ | 0x20(32) | space (SPC) 空格符 |
‘\t’ | 0x09(9) | horizontal tab (TAB) 水平制表符 |
‘\n’ | 0x0a(10) | newline (LF) 换行符 |
‘\v’ | 0x0b(11) | vertical tab (VT) 垂直制表符 |
‘\f’ | 0x0c(12) | feed (FF) 换页符 |
‘\r’ | 0x0d(13) | carriage return (CR) 回车符 |
【函数声明】
int isspace ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个空白字符,函数返回非0值,否则返回0。
【使用举例】
isdigit()
【函数介绍】
判断一个字符是不是十进制数字字符(0~9
)
【函数声明】
int isdigit ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个十进制数字字符,函数返回非0值,否则返回0。
【使用举例】
isxdigit()
【函数介绍】
判断一个字符是不是十六进制字符。
十六进制一般用数字0~9
和字母A~F
(或a~f
)表示,其中A~F
表示10~15。例如:0xf
表示15。
0 1 2 3 4 5 6 7 8 9 a b c d e f
0 1 2 3 4 5 6 7 8 9 A B C D E F。
【函数声明】
int isxdigit ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个十六进制字符,函数返回非0值,否则返回0。
【使用举例】
islower()
【函数介绍】
判断一个字符是不是小写字符。
【函数声明】
int islower ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个小写字符,函数返回非0值,否则返回0。
【使用举例】
版本1(未使用islower
)
版本2(使用islower
,相较于版本1,if语句的条件写起来简单些许)
isupper()
【函数介绍】
判断一个字符是不是大写字符。
【函数声明】
int isupper ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个大写字符,函数返回非0值,否则返回0。
【使用举例】
版本1(未使用isupper
)
版本2(使用isupper
,相较于版本1,代码稍微简洁些许)
isalpha()
【函数介绍】
判断一个字符是不是字母字符。
字母字符包括a~z
和A~Z
【函数声明】
int isalpha ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个字母字符,函数返回非0值,否则返回0。
【使用举例】
版本1(未使用isalpha
)
版本2(使用isalpha
,该例子对比起上面两个函数简化作用明显)
isalnum()
【函数介绍】
判断字符是不是十进制数字字符或字母字符。
范围包括0~9
、a~z
、A~Z
(可以看作isalnum
= isdigit
+ isalpha
)
【函数声明】
int isalnum ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个十进制数字字符或字母字符,函数返回非0值,否则返回0。
【使用举例】
版本1(未使用isalnum
)
(没办法,代码太长,只能暴露我背景了[dogo])
版本2(使用isalnum
)
ispunct()
【函数介绍】
检查一个字符是不是标点字符。
标点符号字符可以是非字母数字(正如 isalnum
中的一样)的任意图形字符(正如 isgraph
中的一样)。(不知道你们看不看得懂概念,反正我是不大看得懂,所以还是来看点实在的)
ASCII表中的标点字符如下
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
【函数声明】
int ispunct ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个标点字符,函数返回非0值,否则返回0。
【使用举例】
总结:对于统计标点字符个数、替换标点字符、删除标点字符等的这些要求都可以使用这个函数。
isgraph()
【函数介绍】
判断一个字符是不是图形字符。
ASCII表中的图形字符如下
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
函数的检测范围相较于ispunct
多出了数字字符0~9
,英文字符A~Z
、a~z
你可以大致的认为isgraph
= ispunct
+ isalnum
【函数声明】
int isgraph ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个图形字符,函数返回非0值,否则返回0。
【使用举例】
iscntrl()
【函数介绍】
判断一个字符是不是控制字符。
控制字符,又称功能字符,该类字符不可打印,但每个字符都有其对应的功能。
根据标准 ASCII 字符集,控制字符的 ASCII 编码介于 0 (NUL) 和 31 (US) 之间,以及 127 (DEL),共计33个。
某些平台的特定编译器实现还可以在扩展字符集(0x7f 以上)中定义额外的控制字符。
在了解学习该函数的相关知识时,发现这篇博客对控制字符的研究比较深,有兴趣深入了解的可以去看看。
《ASCII字符集中的功能/控制字符》
【函数声明】
int iscntrl ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个控制字符,函数返回非0值,否则返回0。
【使用举例】
isprint()
【函数介绍】
判断一个字符是不是可打印字符。
在ASCII表中,除控制字符外均为可打印字符。
【函数声明】
int isprint ( int c );
【参数】
c
– 待检测字符。
【返回值】
如果c
是一个可打印字符,函数返回非0值,否则返回0。
【使用举例】
字符转换
tolower()
【函数介绍】
将大写字符转换为小写字符。
C语言标准中规定,大写字母是以下任意字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
【函数声明】
int tolower ( int c );
【参数】
c
– 待转换字符。
【返回值】
如果c
是一个大写字符,则返回其对应的小写字符;
如果c
是非大写字符,则会返回c
【使用举例】
toupper()
【函数介绍】
将一个小写字符转换为大写字符。
C语言标准中规定,小写字母是以下任意字母: a b c d e f g h i j k l m n o p q r s t u v w x y z
【函数声明】
int toupper ( int c );
【参数】
c
– 待转换字符。
【返回值】
如果c
是一个小写字符,则返回其对应的大写字符;
如果c
是非小写字符,则会返回c
【使用举例】
总结
- 或许看完你会感到疑惑,为什么明明是字符相关函数,但它们的参数类型和返回值类型均为
int
而不是char
。
其实,字符在内存中存储的时,实际上存储的是字符对应的ASCII码值,char
类型数据也是整型家族的一部分,因此使用int
类型的形参接收是完全没有问题的。 - 当你尝试以字符串作为参数时,实际上传入的是首字符的地址,类型是
char*
,而形参类型为int
,类型完全不一致,因此会引发程序错误。