【深入浅出程序设计竞赛】:字符与数字

256 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情

字符与数字

英文字母。英文中有 26 个字母,其中 A 是第一个字母。现在请编程求出:

  1. M 是字母表中的第几个字母?
  2. 第 18 个字母是什么?

输出两个数字,使用换行隔开。

代码如下:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int ans1;
    char ans2;
    ans1 = 'M' - 'A' + 1;
    ans2 = 'A' + 18  - 1;
    cout << ans1 << '\n' << ans2; 
    return 0;
}

运行结果如下:

13
R

记录:

在上述代码中,我们定义了一个 char 类型的变量 ans2,实际上, char 类型的变量更普遍的用法是存储一个字符,包括英文大小写字母,数字以及标点符号等。这些字符和 0~127 的数字是一一对应的。这些数字和字符的对应表被称为 ASCII 表。

在 ASCII 表中,第 0 ~ 31 个字符是不可见字符,属于控制字符。从第 32 个开始,直到第 127 ,每个编号都对应着一个可见字符,属于打印字符。比如,大写字母 A 和 数字 65 对应,是表中的第65个字符。阿拉伯数字 0 和数字 48 对应,是表中的第 48 个字符(注意,这里的 '0'是带有单引号的,是一个字符,本质上就是一种符号,和数字 0 不是同样的东西 )。

ascii表.png

总的来说,char 类型本质上就是一种不大于 127 的整数,只是这些整数可以表示一个对应的字符。

  • 'M' - 'A' + 1:计算字母 'M' 和 字母 'A' 之间的差距。该表达式等价于 77 - 65 + 1
  • 'A' + 18 - 1:计算字母 A 后面的第 18 - 1 个字母是什么,所以就知道字母表中第 18 个字母是什么了。变量 ans2 存储的值为 65 + 18 - 1,也就是 82。使用 cout 输出一个 char 类型的变量时,它会输出这个变量存储的数组对应的那个字符。当然,如果非要输出 82 这个数字的话,只需把这个变量赋值给一个 int 类型的变量即可(或者使用强制类型转换)。