气死我了,我刚才写了半天的文章,浏览器一个闪退全给我毁了!!在这里插入图片描述

字符常量

什么是字符常量?跟字符串有什么关系?好问题。
这玩意儿,曾经把我心态整崩过。
在这里插入图片描述

在讲字符常量以前,我们先说说 ASCII 表。
什么叫 ASCII ? ——

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

总之,在信息学竞赛的范围内,你能用上的地方就是 整数类型 与 字符常量 的互相转化。

今天,我们将认识一位新朋友 —— char类型,它可以表示 ASCII 表中的单个字符。
众所周知,在计算机的视野内只有数字,一切都是建立在数字的基础上的。更进一步说,其实计算机啥也不会,只知道有电(1)还是没电(0),这样形成了二进制。你看,在 ASCII 表中,有10进制的数码对应字符,我们就可以使用强制类型转换将其转化为char类型,也可以用char类型转为int 类型。

// 转换为整数
char s='A'; // 字符常量要使用单引号括起来
int a=s;
cout<<a<<" "; // 65
cout<<int(s)<<endl; // 等同于这种方式

// 转换为字符
int b=97;
char d=b;
cout<<d<<" ";
cout<<char(b);

如果我们想知道从A开始的第n个字母,可以这样做:

// Author:PanDaoxi
#include <bits/stdc++.h>
using namespace std;
int main(){
	int n;
	cin>>n;
	cout<<'A'+n;
	return 0;
}

根据我们刚才所介绍的知识,来做两个题:
Luogu B2018
在这里插入图片描述
Luogu B2017
在这里插入图片描述
简简单单,自己试试吧!😁

拓展:控制字符

大家看, ASCII 表上的前几个都是控制字符。比如 8号是回退(Backspace)、9号是制表(Tab),10号是换行。
对于回退,大家可以尝试按下键盘上的insert感受,回退到前面的字符时,再次输入,后来的字符会代替前面的字符。

// Author:PanDaoxi
#include <bits/stdc++.h>
using namespace std;
int main(){
	cout<<"a"; //正常的输出
	cout<<char(8); //回退
	cout<<"b"; //盖住a
	return 0;
}

制表符相当于\t,换行符相当于\n

// Author:PanDaoxi
#include <bits/stdc++.h>
using namespace std;
int main(){
	cout<<"a"; //正常的输出
	cout<<char(9); //制表符
	cout<<"b"; //正常的输出
	cout<<char(10);//换行符
	cout<<"c";
	cout<<char(9);
	cout<<"d";
	return 0;
}

在这里插入图片描述
更多的知识等待大家去探索。

字符串——字符数组

字符数组,顾名思义,就是由我们刚才的 ASCII 字符组成的数组。当然上面说的 ASCII 只是常规 ASCII ,有亿些特殊符号在扩展 ASCII 中。
我们可以这样定义一个字符数组:

char s[15]={"Hello,World!"}

上面这个字符数组里面储存了字符串Hello,World!
使用字符数组还需要注意一点,即我们给字符数组开长度时要足够大,例如上面的字符串s,单纯可见字符的数量为12个,但是在开长度时至少要开13,原因是末尾有一个不可见的控制字符\0,也占一个长度。
在这里插入图片描述
关于字符数组更多的内容,可以参考我搜集的学习资料

字符串——string

string类型是 STLSTL 提供的字符串类,而字符数组本质上是一种数组,有长度限制;string没有长度限制!
定义方法:

string 变量名="字符串内容";

更多使用方法,可以看我搜集的学习资料
在这里插入图片描述