使用字符数组的 ROT13 实现

罗伯特T79

我是一名新手程序员,他一直在研究 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]是一个大写字母(在您的示例中就是这种情况),alphabet[i] - 'A'将计算到 ASCII 表中字母“A”的距离。所以'A'-'A'将是 0,'B'-'A'将是 1,依此类推,直到'Z'-'A'25。

rot13写入字符数组时,索引 0 是字母'N',索引 1 是字母'O',依此类推,直到索引 12 带有字母'Z',然后索引 13 是'A',索引 14 是'B',依此类推,直到索引 25 是'M'

为了让事情更清楚,让我们重写这一行:

std::cout << rot13[alphabet[i] - 'A'];

作为:

char letterBeforeRot13 = alphabet[i];
int index = letterBeforeRot13 - 'A';
char letterAfterRot13 = rot13[index];
std::cout << letterAfterRot13;

这几乎是你的编译器所做的,但有更多的细节。

如果我们选择一个例子,其中alphabet[i]等于字母'A'letterBeforeRot13分配给字母'A'index分配给'A'-'A'is 0letterAfterRot13分配给数组rot13索引处的元素0,即'N'所以这个字母'A'变成了'N'.

你可以对任何字母做同样的事情,你会看到一切都很好,包括当你认为事情会越界时的边缘情况。使用此技术不能有负索引。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rot13和使用模数

来自分类Dev

如何在Swift中实现ROT13函数?

来自分类Dev

Rot13实现:translate_string函数中的错误

来自分类Dev

解码python rot13字符串

来自分类Dev

试图做类似rot13的解决方案,可以处理特殊字符

来自分类Dev

试图做类似rot13的解决方案,可以处理特殊字符

来自分类Dev

使用unicode.encode('rot13')时如何修复UnicodeEncodingError

来自分类Dev

rot13 decode in java

来自分类Dev

Java中的rot13解码

来自分类Dev

使用字符减法的C strcmp实现

来自分类Dev

Rot13 Java 有什么问题?

来自分类Dev

用Python进行rot13编码的文件是什么,名称是什么?

来自分类Dev

可以在一行中写一个ROT13吗?

来自分类Dev

汇编语言中的Rot13模糊处理无法正常工作

来自分类Dev

用Python进行rot13编码的文件是什么,名称是什么?

来自分类Dev

将 rot13(或其他加密)应用于端口上的所有转发流量

来自分类Dev

Rot13 示例:如何在 Google App Engine 中运行这段代码?

来自分类Dev

使用数组实现堆栈

来自分类Dev

如何在MapDB的BTreeMap实现中使用字节数组作为键

来自分类Dev

如何使用字符范围实现正则表达式NFA?

来自分类Dev

Scala-在Trait内使用字符串插值包含未实现的变量

来自分类Dev

使用字符串中的参数实现执行选择器

来自分类Dev

用字典实现算法

来自分类Dev

用字典实现算法

来自分类Dev

使用数组的Swift ViewModel实现

来自分类Dev

使用数组实现最小堆

来自分类Dev

我需要使用字符串插值实现一种工作方法

来自分类Dev

BigInteger与字符数组实现的上限是多少?

来自分类Dev

BigInteger与字符数组实现的上限是多少?

Related 相关文章

热门标签

归档