第 6 课:字符类型与 ASCII 码
前面我们存储的都是数(整数或小数),现在蛙蛙想存储字母,例如输入 k 这样的字母,他还是使用 int/double 进行输入输出,你觉得他能成功吗?他是这样写的:
#include <iostream>
using namespace std;
int main()
{
double a;
cin >> a;
cout << a;
return 0;
}在控制台上输入 k,蛙蛙发现结果竟然是 0,而不是他想输出的字母 k,这是为什么呢?
这是因为我们输入 k 时,cin >> a; 这行代码会出现输入错误。因为变量 a 是 double 类型,而输入的 k 并不是一个数,所以 cin 操作失败。
在这种情况下,a 的值不会被正确设置,它可能会保持其未初始化的值(通常是一个不确定的垃圾值),但有些编译器可能会将其初始化为 0,所以蛙蛙输出 a 时,就看到了 0。
为了帮助蛙蛙存储字母,氪町博士告诉他,想要保存字母,可以声明一个字符类型的变量。
所谓字符,就是指计算机中使用的字母、数字和符号,例如 26 个大小写英文字母、数字 0~9 和一些特殊的符号,如 #、@、+、- 等。
字符类型(char)是一种数据类型,和实数类型、整型类似,不同的是一个字符类型变量可存储的内容为单个字符。
6.1 ASCII 码
计算机其实是不能直接识别字符的,因此,字符不能直接存储在计算机中。
但是可以利用 ASCII 码(数字)来存储字符。简单来说,ASCII 码就相当于字符对应的数字编号,只要知道编号,就知道是哪个字符了。
举个小例子,在学校里,每个学生的个人信息都是通过学号来记录的,知道了这个学生的学号,就知道是哪个学生了,ASCII 码就类似于学生的学号。
常用字符的 ASCII 码
数字字符:'0' 到 '9' 的 ASCII 码值分别为 48 到 57,即 '0' 的 ASCII 码是 48,'1' 的 ASCII 码是 49,以此类推。
大写字母:'A' 到 'Z' 的 ASCII 码值分别为 65 到 90,即 'A' 的 ASCII 码是 65,'B' 的 ASCII 码是 66,以此类推。
小写字母:'a' 到 'z' 的 ASCII 码值分别为 97 到 122,即 'a' 的 ASCII 码是 97,'b' 的 ASCII 码是 98,以此类推。
ASCII 码实例说明
要声明一个字符类型的变量 a,并赋值为 k,即 char a = 'k';。
这里字符类型变量 a 存储的就是代表字符 k 的 ASCII 码 107,而不是字符 k 本身。
6.2 字符类型
- 定义格式:
char a;// (数据类型)(变量名) - 赋值:
a = 'k';// 将字符 k 赋值给变量 a - 输入:
cin >> a; - 输出:
cout << a;
注意
字符类型变量的输入和输出均与整数类型、实数类型一致。
在控制台输入的时候直接输入字符即可,但是赋值的时候不能忘记字符两边的单引号,比如上面的赋值
a = 'k'。
例 1:巧克力上的字母
蛙蛙爸爸出差回来,给蛙蛙带回来一些美味的巧克力。细心的蛙蛙发现,每块巧克力上面都刻着一个字符。他想把巧克力上的字符记录下来,经过一番操作,他记录了两个字符。
【输入格式】输入一行,两个字符。
【输出格式】输出一行,两个字符,用空格隔开。
【输入样例】l v
【输出样例】l v
解析
定义变量。首先定义两个 char 类型的变量,char 类型用于存储单个字符。
字符输入。通过 cin 语句,输入这两个变量。
字符输出。最后通过 cout 进行输出,按照顺序先输出第一个变量对应的字符,然后输出一个空格(通过
" "来表示一个空格字符),接着输出第二个变量对应的字符。
参考代码
#include <iostream>
using namespace std;
int main()
{
char a,b; // 声明两个字符类型的变量 a 和 b
cin >> a >> b; // 输入两个字符,并将其分别保存到 a 和 b 中
cout << a << " " << b;
return 0;
}6.3 字符转换成 ASCII 码
字符是 char 类型,而 ASCII 码是 int 类型,想要输出字符相对应的 ASCII 码,需要把 char 类型转换成 int 类型。比如输入一个字符 k,输出它的 ASCII 码 107。氪町博士准备教大家两种转换的方法。
方法一:先声明一个整型变量,再将字符赋值给整型变量进行转换。
char a = 'k';
int x;
x = a;
cout << x;方法二:直接进行强制类型转换。
char a = 'k';
cout << (int)a;例 2:字符对应的 ASCII 码
蛙蛙已经记录完了巧克力上的字符,他还想知道字符所对应的 ASCII 码。现在他拿出两个字符,请你输出它们所对应的 ASCII 码的值。
【输入格式】输入一行,用空格隔开的两个字符。
【输出格式】输出一行,两个字符所对应的 ASCII 码的值,用空格隔开。
【输入样例】m 3
【输出样例】109 51
解析
先定义两个 char 类型的变量,用来存储需要输入的两个字符。
使用 cin 语句进行输入操作,依次读取输入的两个字符并赋值给对应的变量。例如,当输入 m 3 时,cin 会先把字符 m 赋给第一个变量,再把字符 3 赋给第二个变量。
在 C++ 里,字符类型的变量可以直接当作整数来使用,因为其存储的就是 ASCII 码的整数值。所以可以直接通过声明 int 类型的变量来存储字符,即可得到字符所对应的 ASCII 码值,也可以进行强制类型转换。
输出两个字符类型的变量所对应的 ASCII 码值,用空格隔开。
参考代码
#include <iostream>
using namespace std;
int main()
{
char a,b;
cin >> a >> b;
cout << int(a) << " " << int(b);
return 0;
}6.4 ASCII 码转换成字符
ASCII 码是 int 类型,而字符是 char 类型,所以要输出字符,需要把 int 类型转换成 char 类型。与字符转换为 ASCII 码类似,这里氪町博士还是教大家两种方法。
方法一:先声明一个字符类型变量,再将整数赋值给字符类型变量进行转换。
int a = 107;
char b;
b = a;
cout << b;方法二:直接进行强制类型转换。
int a = 107;
cout << (char)a;例 3:转校生的姓名
班级里新来了一个转校生,蛙蛙想知道他叫什么名字,但是转校生只告诉他两个数,让他猜自己的姓名的首字母,如果猜对了,就送蛙蛙一份小礼物。已知他的姓名只有两个汉字。
【输入格式】输入一行,两个整数。
【输出格式】输出一行,以这两个整数为 ASCII 码的字母,用空格隔开。
【输入样例】108 99
【输出样例】l c
解析
先定义两个 int 类型的变量,用于接收输入的两个整数,再通过 cin 语句输入这两个整数。
然后将两个 int 类型的值转换为字符。在 C++ 中,要将整数转换为对应的 ASCII 码字符,可以使用类型转换操作。直接通过声明 char 类型的变量存储 ASCII 的值,即可得到 ASCII 所对应的字符,也可以进行强制类型转换。
最后通过 cout 语句直接输出两个 int 类型的变量所对应的字符,用空格隔开。
参考代码
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << char(a) << " " << char(b);
return 0;
}6.5 字符的算术运算
字符类型是可以直接进行算术运算的,计算机进行计算的时候会自动对字符所对应的 ASCII 码的值进行相应的运算,比如:
char b = 'a';
cout << b + 2;计算的是字符 a 的 ASCII 码与 2 相加的值,所以结果是 99。两个字符也可以直接进行运算,比如:
cout << 'B' - 'b';计算的是两个字符的 ASCII 码相减的值,结果是 32。
例 4:补习班的座位
蛙蛙和 A 同学想进一步提升自己的成绩,于是一起报了同一个培优班。培优班在开课之前给每位学生都分配了一个字符,学生通过这个字符能够找到座位。
但来到班级后,同学们发现座位上都是数字。老师告诉他们,数字是字符对应的 ASCII 码,他们需要解密来找到自己的座位。蛙蛙想找到两人的座位,并想知道他的座位号比 A 同学大多少。
【输入格式】输入一行,两个用空格隔开的字符。
【输出格式】输出两行。第 1 行为两个字母所对应的 ASCII 码,以空格隔开;第 2 行为第一个字符比第二个字符大了多少。
【输入样例】b a
【输出样例】
98 97
1解析
首先,程序使用 cin 从标准输入读取两个字符,存储在变量 a 和 b 中。
接着,使用
(int)a和(int)b将字符 a 和 b 转换为它们对应的 ASCII 码,并将结果输出,用空格分隔。最后,将字符 a 和 b 转换为 int 类型后进行减法运算,得到它们的 ASCII 码的差值。也可以直接将字符 a 和 b 相减,并将结果输出。注意输出差值前要先使用 endl 换行。
参考代码
#include <iostream>
using namespace std;
int main()
{
char a,b;
cin >> a >> b;
cout << (int)a << " " << (int)b << endl;
cout << a - b;
return 0;
}6.6 大小写字母转换
根据 6.1 节中常用字符的 ASCII 码值,我们得知小写字母 a 的 ASCII 码值是 97,大写字母 A 的 ASCII 码值是 65,它们的差值是 32。
也就是说小写字母比对应大写字母的 ASCII 码的值大 32。所以要将小写字母转换为大写字母,只需要将其减去 32,再转换为字符类型即可。
比如我们想要输出字符 h 对应的大写字母,可以这样写:
cout << char('h' - 32);如果我们要将大写字母转换为小写字母,只需要将其加上 32,再转换为字符类型即可。比如我们要输出字符 F 对应的小写字母,可以直接写为:
cout << char('F' + 32);总结:将小写字母转为大写字母,直接减 32 即可;将大写字母转为小写字母,直接加 32 即可。
