C语言菜鸟成长之旅:《字符函数篇》

前言

在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~zA~Z

【函数声明】
int isalpha ( int c );

【参数】
c – 待检测字符。

【返回值】
如果c是一个字母字符,函数返回非0值,否则返回0。

【使用举例】
版本1(未使用isalpha
在这里插入图片描述
版本2(使用isalpha,该例子对比起上面两个函数简化作用明显)
在这里插入图片描述

isalnum()

【函数介绍】
判断字符是不是十进制数字字符或字母字符。
范围包括0~9a~zA~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~Za~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

【使用举例】
在这里插入图片描述

总结

  1. 或许看完你会感到疑惑,为什么明明是字符相关函数,但它们的参数类型和返回值类型均为int而不是char
    其实,字符在内存中存储的时,实际上存储的是字符对应的ASCII码值,char类型数据也是整型家族的一部分,因此使用int类型的形参接收是完全没有问题的。
  2. 当你尝试以字符串作为参数时,实际上传入的是首字符的地址,类型是char*,而形参类型为int,类型完全不一致,因此会引发程序错误。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值