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

news2024/11/24 20:12:53

C++数据类型之字符类型详解

  • 引言
  • 一、背景知识
  • 二、字符常量
  • 三、字符变量
  • 四、键盘(输入设备)给字符变量赋值
  • 五、字符常量和字符串常量的区别
  • 六、案例:字符大小写转换
  • 总结

引言


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


🔔 上一篇:【003】C++数据类型之整型变量(int)详解

一、背景知识

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=65和ch='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. 操作方式不同:对于字符常量,可以进行逻辑运算、比较操作等;而对于字符串常量,只能使用字符串函数库进行操作,例如 strlen、strcpy、strcat 等。

在这里插入图片描述

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

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

#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类型来表示。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识变现海哥|为什么你无法将学到的知识变现

秋叶大叔在公众号里发了这样一篇文章《为什么今天的年轻人更要读大学&#xff1f;》&#xff0c;文章里提到这样一个观点&#xff1a;一个人的专业能力要获得优质的回报&#xff0c;还需要学一样「变现技能」。 我不由得想问一个问题&#xff1a;你真的理解变现能力吗&#xf…

微信公众号服务号客服对接-唯一客服系统文档中心

微信公众号客服功能&#xff0c;需要公众号为认证的服务号&#xff0c;可以实现公众号模板消息提醒&#xff0c;网页授权获取到微信的昵称头像&#xff0c;机器人或AI自动回复功能等 微信公众号后台设置 【设置与开发】【基本配置】 设置好公众号的AppID AppSecret IP白名单 【…

亚马逊云科技助力默沙东,用数字化技术赋能医药市场营销

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在全球药企中&#xff0c;默沙东是封神的存在。提及其明星药物&#xff0c;我们接种的乙肝疫苗、麻疹疫苗、宫颈癌九价疫苗、快速短效麻醉剂、抗生素青霉素钾等药物皆出自于默沙东。 2022年&#xff0c;全球药企TOP 10营业收…

ChatGPT国内免费使用方法有哪些?

目录 ChatGPT介绍:一、ChatGPT是什么?二、ChatGPT发展:三、ChatGPT 优点:四、国内使用ChatGPT方法五、结语: ChatGPT介绍: 一、ChatGPT是什么? ChatGPT 是一个基于语言模型 GPT-3.5 的聊天机器人&#xff0c;ChatGPT模型是Instruct GPT的姊妹模型&#xff08;siblingmodel&a…

Lighttpd服务器安装

目录 >1服务器安装配置 1.解压 2.进入源码目录&#xff0c;创建文件夹web 3.执行configure脚本文件 4.执行Makefile文件 >2目录创建及文件移动 1.将源码目录lighttpd-1.4.54下web文件夹移动到某个路径下 2.在web目录下创建文件夹&#xff08;config、log、run、www&#…

jsp+springboot酒店客房管理系统 i59uz

&#xff08;1&#xff09;管理员模块&#xff1a;系统记录管理员号以及密码&#xff0c;以及对权限的设置&#xff0c;对酒店进行信息管理&#xff0c;对房客进行信息的登记和修改&#xff0c;以及对酒店的信息进行维护。 Spring Boot 是 Spring 家族中的一个全新的框架&#…

【JVM】2. 类加载子系统

文章目录 2.1. 内存结构概述&#x1f352;2.2. 类加载器与类的加载过程&#x1f352;2.2.1 加载阶段&#x1f353;&#x1f353;2.2.2 链接阶段&#x1f353;&#x1f353;2.2.3 初始化阶段&#x1f353;&#x1f353; 2.3. 类加载器分类&#x1f352;2.3.1. 虚拟机自带的加载器…

基于自适应特征融合网络的地铁OD流预测

1 导读 本论文于2023年发表于交通领域顶刊《IEEE Transactions on Intelligent Transportation Systems》。文章针对OD流预测中存在的三点问题&#xff0c;即复杂动态的时空依赖性、数据稀疏性和不完整性以及容易受到外部因素影响展开研究&#xff0c;提出了一个自适应特征融合…

遇到一个同事,喜欢查其他同事的BUG,然后截图发工作大群里,还喜欢甩锅,该怎么办?...

职场上都有哪些奇葩同事&#xff1f; 一位网友吐槽&#xff1a; 遇到一个同事&#xff0c;喜欢查同级别同事的bug&#xff0c;截图发工作群&#xff0c;甚至发大群里&#xff0c;还喜欢甩锅&#xff0c;该怎么办&#xff1f; 职场工贼&#xff0c;人人喊打&#xff0c;网友们纷…

LCHub:网易数帆汪源:低代码仍然被“误会”,市场明年会迎拐点

LCHub:2023年四月底,在北京见到网易副总裁、网易杭州研究院执行院长、网易数帆总经理汪源,他展现出对于低代码、生成式AI技术非常开放的分享状态。汪源是网易杭州研究院执行院长,他负责的研究院在2006年已经成立,早期的网易数帆就是研究院的技术团队,支撑网易公司的数个主…

【MySQL聚合查询】轻松实现数据统计

1、聚合查询 聚合查询&#xff1a;行和行之间的运算 1.1 聚合函数 常见的聚合函数&#xff1a; count&#xff1a;数量 sum&#xff1a;求和 avg&#xff1a;求平均值 max&#xff1a;最大值 min&#xff1a;最小值 1.2 聚合函数的使用 1.2.1 count 函数 现在有一个 class 表&a…

【Python每日一练】总目录(2023.2.18~5.18)共90篇

2023.2.18~2023.5.18 连载三个月共90篇&#xff0c;暂停更 Python 2023.05 2023.05.11-2023.05.18 20230518 20230517 1. 最大连续1的个数 I Max Consecutive Ones &#x1f31f; 2. 最大连续1的个数 II Max Consecutive Ones &#x1f31f;&#x1f31f; 3. 最大连续1的个…

什么是K-近邻算法?

一、什么是K-近邻算法&#xff1f; K近邻算法&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种基本的分类和回归算法。它的基本原理是通过测量样本之间的距离来对未知样本进行分类或预测。KNN算法被归类为一种“懒惰学习”&#xff08;lazy learning&am…

【K8s】安全认证与DashBoard

文章目录 一、概述1、客户端2、认证、鉴权与准入控制 二、认证管理1、认证方式2、HTTPS证书认证 三、授权管理1、授权与RBAC2、Role 与 ClusterRole3、RoleBinding 与 ClusterRoleBinding4、案例&#xff1a;创建一个只能管理dev空间下Pods资源的账号 四、准入控制五、DashBoar…

【ARMv8 编程】A64 流控制指令

A64 指令集提供了许多不同种类的分支指令。对于简单的相对分支&#xff0c;即那些从当前地址偏移的分支&#xff0c;使用 B 指令。无条件简单相对分支可以从当前程序计数器位置向后或向前分支最多 128MB。 有条件的简单相对分支&#xff0c;其中条件代码附加到 B&#xff0c;具…

用Pin对二进制文件自动脱壳

Intel Pin Intel Pin在可执行二进制代码中插入一些探测函数,用于观察、记录、分析宿主代码执行过程中的一些与计算机体系结构相关的特性,如访存指令,寄存器内容,寄存器地址等,通过Pin提供的API可以编写各种分析函数,这样程序运行完以后,统计和分析结果也同时产生,分析…

solidworks2020及麦迪工具箱安装

1、麦迪工具箱安装 1&#xff09;下载 下载链接&#xff1a;www.maidiyun.com/download 下载今日制造 2&#xff09;安装 由于电脑上安装了杀毒软件&#xff0c;会直接删除解压后的安装包&#xff0c;因此需要关闭杀毒软件或者在被删除后进入杀毒软件的隔离区将该文件添加…

网站信息收集

网站信息收集 ip信息收集 域名Whois查询 - 站长之家 Whois查询 http://tool.chinaz.com/ 站长工具 https://dns.aizhan.com/ 爱站网 ping检测 ip反查域 https://x.threatbook.cn/ 微步在线 https://toolbar.netcraft.com/site_report 网站查询 http://tool.chinaz.com/n…

JECloud 运行前端模块所遇到的问题(持续学习汇总)

1.依赖安装问题 官网 JECLoud 前端打包部署 1.1 部署前 注意 可以先下载 jecloud-libs 项目 尝试 部署安装 node版本不能过高&#xff01;选择node v14.17.5 版本 在部署前 如果当前node版本过高可以使用 nvm工具 切换到低版本&#xff0c; 但是需要注意的是 切换版本时 …

判断数组中各个元素是否为实数numpy.isreal()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 判断数组中各个元素是否为实数 numpy.isreal() 选择题 以下程序的运行结果是? import numpy as np anp.array([11j,2j,3.4,5]) print("【显示】a:");print(a) print("【执行】…