【发布时间】:2018-08-12 20:22:12
【问题描述】:
我是一名新手程序员,一直致力于 ROT13 实现作为教程的一部分,并遇到了以下代码。它输出正确的字符,但我不太确定它是如何工作的,也没有附加解释。
char rot13[] = { 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M' };
std::string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < alphabet.length(); i++) {
std::cout << rot13[alphabet[i] - 'A'];
}
具体来说,我不太明白从字符串字母表中的字符中减去“A”如何为我们提供 ROT13 编号。我最初认为 'A' 对应于 rot13[] 中的一个索引,减去这将为我们提供一个新索引,但这并不表示 A 的索引 (Z,Y,X...) 下面的任何数字都会变成结果为负索引并引发错误。
有人能向我解释这段代码背后的逻辑吗?
【问题讨论】:
-
这个例子有点愚蠢,因为
alphabet[i] - 'A' == i。所以rot13[i]也可以。无论如何,它依赖于字符'A'到'Z'的ASCII 码是连续的,例如'B' == 'A' + 1。从这里可以看出'B' - 'A' == 1