在实际开发中,程序员很少用单个字符来表示一个完整的数据,字符的意义主要作为数组的时候可以形成一个字符串。在本章节中,我们更关心字符与整数之间的关系和ASCII码的相关知识。
字符类型char,只能用单引号' '来包围,不能用双引号" "包围。而字符串只能用双引号" "包围,不能用单引号' '包围。
输出字符使用 %c,输出字符串使用 %s。
ASCII码表
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的电脑编码系统,用于显示现代英语和其他西欧语言,它是现今最通用的单字节编码系统。
ASCII码规范于1967年第一次发布,它包含了33个控制字符(具有某些特殊功能但是无法显示的字符)和95个可显示字符。
1、ASCII 控制字符 (字符编码: 0-31)
在ASCII码表中,前32个字符是不能用于显示的编码,而是用于控制外围设备。
十进制 | 符号 | 中文解释 |
0 | NULL | 空字符 |
1 | SOH | 标题开始 |
2 | STX | 正文开始 |
3 | ETX | 正文结束 |
4 | EOT | 传输结束 |
5 | ENQ | 询问 |
6 | ACK | 收到通知 |
7 | BEL | 铃 |
8 | BS | 退格 |
9 | HT | 水平制表符 |
10 | LF | 换行键 |
11 | VT | 垂直制表符 |
12 | FF | 换页键 |
13 | CR | 回车键 |
14 | SO | 移出 |
15 | SI | 移入 |
16 | DLE | 数据链路转义 |
17 | DC1 | 设备控制 1 |
18 | DC2 | 设备控制 2 |
19 | DC3 | 设备控制 3 |
20 | DC4 | 设备控制 4 |
21 | NAK | 拒绝接收 |
22 | SYN | 同步空闲 |
23 | ETB | 传输块结束 |
24 | CAN | 取消 |
25 | EM | 介质中断 |
26 | SUB | 替换 |
27 | ESC | 换码符 |
28 | FS | 文件分隔符 |
29 | GS | 组分隔符 |
30 | RS | 记录分离符 |
31 | US | 单元分隔符 |
2、ASCII 可打印字符 (字符编码: 32-127)
32~126(共95个)是字符:32是空格,其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。第127个字符表示的是键盘上的删除命令。
十进制 | 符号 | 中文解释 |
32 |
| 空格 |
33 | ! | 感叹号 |
34 | " | 双引号 |
35 | # | 井号 |
36 | $ | 美元符 |
37 | % | 百分号 |
38 | & | 与 |
39 | ' | 单引号 |
40 | ( | 左括号 |
41 | ) | 右括号 |
42 | * | 星号 |
43 | + | 加号 |
44 | , | 逗号 |
45 | - | 连字号或减号 |
46 | . | 句点或小数点 |
47 | / | 斜杠 |
48 | 0 | 0 |
49 | 1 | 1 |
50 | 2 | 2 |
51 | 3 | 3 |
52 | 4 | 4 |
53 | 5 | 5 |
54 | 6 | 6 |
55 | 7 | 7 |
56 | 8 | 8 |
57 | 9 | 9 |
58 | : | 冒号 |
59 | ; | 分号 |
60 | < | 小于 |
61 | = | 等号 |
62 | > | 大于 |
63 | ? | 问号 |
64 | @ | 电子邮件符号 |
65 | A | 大写字母 A |
66 | B | 大写字母 B |
67 | C | 大写字母 C |
68 | D | 大写字母 D |
69 | E | 大写字母 E |
70 | F | 大写字母 F |
71 | G | 大写字母 G |
72 | H | 大写字母 H |
73 | I | 大写字母 I |
74 | J | 大写字母 J |
75 | K | 大写字母 K |
76 | L | 大写字母 L |
77 | M | 大写字母 M |
78 | N | 大写字母 N |
79 | O | 大写字母 O |
80 | P | 大写字母 P |
81 | Q | 大写字母 Q |
82 | R | 大写字母 R |
83 | S | 大写字母 S |
84 | T | 大写字母 T |
85 | U | 大写字母 U |
86 | V | 大写字母 V |
87 | W | 大写字母 W |
88 | X | 大写字母 X |
89 | Y | 大写字母 Y |
90 | Z | 大写字母 Z |
91 | [ | 左中括号 |
92 | \ | 反斜杠 |
93 | ] | 右中括号 |
94 | ^ | 音调符号 |
95 | _ | 下划线 |
96 | ` | 重音符 |
97 | a | 小写字母 a |
98 | b | 小写字母 b |
99 | c | 小写字母 c |
100 | d | 小写字母 d |
101 | e | 小写字母 e |
102 | f | 小写字母 f |
103 | g | 小写字母 g |
104 | h | 小写字母 h |
105 | i | 小写字母 i |
106 | j | 小写字母 j |
107 | k | 小写字母 k |
108 | l | 小写字母 l |
109 | m | 小写字母 m |
110 | n | 小写字母 n |
111 | o | 小写字母 o |
112 | p | 小写字母 p |
113 | q | 小写字母 q |
114 | r | 小写字母 r |
115 | s | 小写字母 s |
116 | t | 小写字母 t |
117 | u | 小写字母 u |
118 | v | 小写字母 v |
119 | w | 小写字母 w |
120 | x | 小写字母 x |
121 | y | 小写字母 y |
122 | z | 小写字母 z |
123 | { | 左大括号 |
124 | | | 垂直线 |
125 | } | 右大括号 |
126 | ~ | 波浪号 |
127 | 删除 |
3、转义字符
对于 ASCII 编码,0~31(十进制)范围内的字符为控制字符,它们都是看不见的,不能在显示器上显示,甚至无法从键盘输入,只能用转义字符的形式来表示。
不过,直接使用 ASCII 码记忆不方便,也不容易理解,所以,针对常用的控制字符,C语言又定义了简写方式,完整的列表如下:
转义字符 | 意义 | ASCII码值 | 使用频率 |
\n | 换行(LF) ,将当前位置移到下一行开头。 | 10 | 每天都用 |
\' | 单引号。 | 39 | 常用 |
\" | 双引号。 | 34 | 常用 |
\\ | 反斜杠。 | 92 | 常用 |
\r | 回车(CR) | 13 | 不常用 |
\t | 水平制表(HT) 。 | 9 | 从未使用 |
\v | 垂直制表(VT)。 | 11 | 从未使用 |
\a | 响铃(BEL)。 | 7 | 从未使用 |
\b | 退格(BS) ,将当前位置移到前一列。 | 8 | 从未使用 |
\f | 换页(FF),将当前位置移到下页开头。 | 12 | 从未使用 |
\n是最常用的转义字符,表示换行,让文本从下一行的开头输出,前面的章节中已经多次使用。
\r\n用于windows平台DOS格式文件的换行。
单引号、双引号、反斜杠是特殊的字符,不能直接表示。
单引号是字符类型的开头和结尾,要使用\'表示。
双引号是字符串的开头和结尾,要使用\"表示。
反斜杠是转义字符的开头,要使用\\表示。
示例(book68.c)
运行结果
字符就是整数
字符和整数没有本质的区别。可以给 char 变量一个字符,也可以给它一个整数;反过来,可以给 int 变量一个整数,也可以给它一个字符。
char 变量在内存中存储的是字符对应的 ASCII 码值。如果以 %c 输出,会根据 ASCII 码表转换成对应的字符,如果以 %d 输出,那么还是整数。
int 变量在内存中存储的是整数本身,如果以 %c 输出时,也会根据 ASCII 码表转换成对应的字符。
也就是说,ASCII 码表将整数和字符关联起来了。
char类型占内存一个字节,signed char取值范围是-128-127,unsigned char取值范围是0-255。
描述再准确一些,在char的取值范围内(0-255),字符和整数没有本质区别。
示例(book67.c)
运行结果
在ASCII码表中,E、F、G、H 的值分别是 69、70、71、72。
常用的库函数
以下是常用的字符函数,必须掌握。
int isalpha(int ch); 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0。
int isalnum(int ch); 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0。
int isdigit(int ch); 若ch是数字('0'-'9')返回非0值,否则返回0。
int islower(int ch); 若ch是小写字母('a'-'z')返回非0值,否则返回0。
int isupper(int ch); 若ch是大写字母('A'-'Z')返回非0值,否则返回0。
int tolower(int ch); 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')。
int toupper(int ch); 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z')
以下是不常用的字符函数,极少使用,了解即可。
int isascii(int ch); 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0。
int iscntrl(int ch); 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F),返回非0值,否则返回0。
int isprint(int ch); 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否则返回0。
int ispunct(int ch); 若ch是标点字符(0x00-0x1F)返回非0值,否则返回0。
int isspace(int ch); 若ch是空格(' '),水平制表符('/t'),回车符('/r'),走纸换行('/f'),垂直制表符('/v'),换行符('/n'),返回非0值,否则返回0。
int isxdigit(int ch); 若ch是16进制数('0'-'9','A'-'F','a'-'f')返回非0值,否则返回0。
版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道
如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!
如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!