气死我了,我刚才写了半天的文章,浏览器一个闪退全给我毁了!!
字符常量
什么是字符常量?跟字符串有什么关系?好问题。
这玩意儿,曾经把我心态整崩过。
在讲字符常量以前,我们先说说 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类型是 提供的字符串类,而字符数组本质上是一种数组,有长度限制;string没有长度限制!
定义方法:
string 变量名="字符串内容";
更多使用方法,可以看我搜集的学习资料。