【004】C++数据类型之字符类型(char)详解

引言


💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
👉
🎖️ CSDN实力新星,社区专家博主
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu


🔔 上一篇:【003】C++数据类型之整型变量(int)详解
🔔 下一篇:【005】C++数据类型之实型(浮点数)、有符号数以及无符号数

一、背景知识

char类型是另一种整型。char类型是专门为存储字符而设计的。现在,存储数字对于计算机来说算不了什么,但存储字母则是另一种回事,编程语言通过使用字母的数值编码解决这个问题;因此,char类型是另一种整型。很多系统支持的字符不超过128个,因此可以使用一个字节就能表示所有符号。

虽然char常用来处理字符,但也可以将它用做比short更小的整型。

ASCII码表是一个标准字符编码系统,用来将数字、字母、符号和其他可打印和非打印字符转换成二进制代码。以下是ASCII码表的部分内容:

十进制ASCII字符二进制
0NUL(空字符)0000 0000
1SOH(标题开始)0000 0001
2STX(正文开始)0000 0010
3ETX(正文结束)0000 0011
4EOT(传输结束)0000 0100
5ENQ(请求)0000 0101
6ACK(确认响应)0000 0110
7BEL(响铃)0000 0111
8BS(退格)0000 1000
9TAB(水平制表符)0000 1001
10LF(换行)0000 1010
11VT(垂直制表符)0000 1011
12FF(换页)0000 1100
13CR(回车)0000 1101
14SO(移位输出)0000 1110
15SI(移位输入)0000 1111
16DLE(数据链路转义)0001 0000
17DC1(设备控制1)0001 0001
18DC2(设备控制2)0001 0010
19DC3(设备控制3)0001 0011
20DC4(设备控制4)0001 0100
21NAK(否定响应)0001 0101
22SYN(同步空闲)0001 0110
23ETB(传输块结束)0001 0111
24CAN(取消)0001 1000
25EM(媒介结束)0001 1001
26SUB(替换)0001 1010
27ESC(转义)0001 1011
28FS(文件分隔符)0001 1100
29GS(组分隔符)0001 1101
30RS(记录分隔符)0001 1110
31US(单元分隔符)0001 1111
32SPACE(空格)0010 0000
33!0010 0001
34"0010 0010
35#0010 0011
36$0010 0100
37%0010 0101
38&0010 0110
390010 0111
40(0010 1000
41)0010 1001
42*0010 1010
43+0010 1011
44,0010 1100
45-0010 1101
46.0010 1110
47/0010 1111
4800011 0000
4910011 0001
5020011 0010
5130011 0011
5240011 0100
5350011 0101
5460011 0110
5570011 0111
5680011 1000
5790011 1001
58:0011 1010
59;0011 1011
60<0011 1100
61=0011 1101
62>0011 1110
63?0011 1111
64@0100 0000
65A0100 0001
66B0100 0010
67C0100 0011
68D0100 0100
69E0100 0101
70F0100 0110
71G0100 0111
72H0100 1000
73I0100 1001
74J0100 1010
75K0100 1011
76L0100 1100
77M0100 1101
78N0100 1110
79O0100 1111
80P0101 0000
81Q0101 0001
82R0101 0010
83S0101 0011
84T0101 0100
85U0101 0101
86V0101 0110
87W0101 0111
88X0101 1000
89Y0101 1001
90Z0101 1010
91[0101 1011
92\0101 1100
93]0101 1101
94^0101 1110
95_0101 1111
96`0110 0000
97a0110 0001
98b0110 0010
99c0110 0011
100d0110 0100
101e0110 0101
102f0110 0110
103g0110 0111
104h0110 1000
105i0110 1001
106j0110 1010
107k0110 1011
108l0110 1100
109m0110 1101
110n0110 1110
111o0110 1111
112p0111 0000
113q0111 0001
114r0111 0010
115s0111 0011
116t0111 0100
117u0111 0101
118v0111 0110
119w0111 0111
120x0111 1000
121y0111 1001
122z0111 1010
123{0111 1011
124|0111 1100
125}0111 1101
126~0111 1110
127DEL(删除)0111 1111

二、字符常量

C++中的字符常量用单引号括起来,表示一个字符。例如:

char c = 'a';

在单引号内可放任何一个字符,包括字母、数字、符号等。如果要表示某些特殊字符(如回车符、换行符等),可以使用转义字符来表示。例如:

char c1 = '\n'; // 换行符
char c2 = '\t'; // 制表符
char c3 = '\''; // 单引号
char c4 = '\"'; // 双引号
char c5 = '\\'; // 反斜杠

还有一种特殊的字符常量是空字符(Null Character),用\0表示。它表示空字符,也就是字符串的结束标志符。例如:

char str[] = "hello world"; // 字符串常量
char c6 = '\0'; // 空字符

输出字符和字符ASCII值的方式:

cout<<'a'<<endl;// 输出的是字符
cout<<(int)'a'<<endl;// 输出的是字符的ASCII值 97

三、字符变量

C++中的字符变量是一种用来存储单个字符的数据类型,通常使用char关键字定义。每个字符常量被分配一个字节的内存空间,字符值以ASCII码的形式存放在变量的内存单元中;它可以存储任何ASCII码字符,包括字母、数字、标点符号、空格等。

例如,下面是一个定义字符变量并赋值的示例:

char ch = 'A';

在这个示例中,定义了一个名为ch的字符变量,并将其初始化为小写字母A

除了单引号中的字符外,还可以通过其ASCII码值来初始化字符变量。例如:

char ch = 65;

这将把字符变量ch的值设置为ASCII码为65的字符,即大写字母A。

ch变量中存放的是字符A的ASCII值65,即ch=65ch='A'在本质上是一致的。

字符变量的初始化:

char ch='\0';

注意 '\0'0和数值0的区别:

  • '\0'代表ASCII码中的空字符,也称为null字符或者零终止符号。它是一个字符类型,占用1个字节的空间。

  • 0是一个整数类型,表示十进制中的数字0。它占用4个字节的空间。

  • 数值0是一个整数类型,表示十进制中的数字0。它占用4个字节的空间。

它们之间的区别在于数据类型和存储空间大小。'\0'只是一个字符,而0和数值0则是整型数字,大小为4个字节。在某些情况下,'\0'可能被视为数值0,但是它们的数据类型不同,不能通用。

四、键盘(输入设备)给字符变量赋值

char ch='\0';
cout<<"请输入一个字符:";
cin>>ch;
cout<<"ch = "<<ch<<endl;

注意:

  • cin会判断ch的类型为char,一次只读一个字母
  • cin会跳过起始的空格和回车。
请输入一个字符:   abcd
ch=a

五、字符常量和字符串常量的区别

  1. 表示方式不同:字符常量用单引号括起来,例如 ‘a’;而字符串常量用双引号括起来,例如 “hello world”。

  2. 数据类型不同:字符常量是一个字符,数据类型是 char;而字符串常量是一串字符数组,数据类型是 const char*

  3. 存储方式不同:字符常量存储在内存中的一个字符单元中,字符串常量则是以 null 结尾的字符数组,存储在静态存储区域(即常量区)。

  4. 赋值方式不同:字符常量可以直接赋值给 char 类型的变量,例如 char a = 'a';而字符串常量需要使用 strcpy() 函数或者初始化语法赋值给 char* 类型的变量,例如 const char* str = "hello world"; 或者 char str[] = "hello world";

  5. 操作方式不同:对于字符常量,可以进行逻辑运算、比较操作等;而对于字符串常量,只能使用字符串函数库进行操作,例如 strlenstrcpystrcat 等。

在这里插入图片描述

六、案例:字符大小写转换

键盘输入一个字符,如果是大写就改成小写,如果是小写就改写成大写,其他字符不改变。

#include <iostream>
using namespace std;

int main()
{
	char ch='\0';
	cout<<"请输入一个字符:";
	cin>>ch;
	if(ch>='a' && ch<='z')
		ch=ch-('a'-'A');
	else if(ch>='A' && ch<='Z')
		ch=ch+('a'-'A');
	cout<<"ch = "<<ch<<endl;
}

示例中使用了一个规律,就是每个大小写直接的差值是一样的。

七、总结

  1. char类型表示单个字符,占用一个字节(8位),范围为-128~ 127或0~255(取决于是否使用有符号类型)。

  2. 可以使用单引号将字符括起来,例如:‘a’、‘B’、'1’等。

  3. 还可以使用转义字符表示一些特殊的字符,例如:'\n'表示换行符、'\t'表示制表符等。

  4. char类型变量可以被赋值为字符常量、字符变量和字符表达式等。

  5. 字符串是由多个字符组成的序列,可以用char数组或string类型表示。

  6. char类型也可以用于输入输出操作,例如:cin和cout等。

  7. C++中还提供了许多对char类型进行操作的函数,例如:strlen、strcat、strcpy等。

  8. 在ASCII编码中,每个字符都对应一个唯一的整数值,可以通过强制类型转换将字符转换为对应的整数值,例如:int('a')的结果为97。

  9. Unicode是一种字符集,它包含了世界上大部分的字符,可以通过wchar_t类型来表示。
    在这里插入图片描述

  • 18
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值