任何人都可以解释这组代码是如何工作的吗?
string LoginAccess::decryptPass(string pass) {
int count = 0;
while (count < pass.length()) {
if (isalpha(pass[count])) {
//For Caps lock
if (pass[count] > 64 && pass[count] < 91) {
if (pass[count] < 88) {
pass[count] += 3;
} else if (pass[count] == 88) {
pass[count] = 'A';
} else if (pass[count] == 89) {
pass[count] = 'B';
} else
pass[count] = 'C';
//For small char
} else {
if (pass[count] < 120) {
pass[count] += 3;
} else if (pass[count] == 120) {
pass[count] = 'a';
} else if (pass[count] == 121) {
pass[count] = 'b';
} else
pass[count] = 'c';
}
}
count++;
}
return pass;
}
64,91等数字是什么意思? 为什么只设置a,b,c?其余的字母表会发生什么?
答案 0 :(得分:3)
此函数循环字符串pass
,递增计数以用作数组的索引。该代码正在解码Ceasar密码,其中每个字母在字母表中向下移动一定数量的位置,在这种情况下为三个。
它将当前字符(pass[count]
)与ASCII字符代码进行比较。每个字母和标点符号都有一个与之关联的数字。您可以在this page上看到字符图表。正如你在那里看到的那样,大写字母('A'到'Z')的范围是65到90,小写字母('a'到'z')的范围是97到122.
因此代码会检查字母是大写还是小写。默认情况下会将字母向前移动三个空格,但如果它用字母表的最后三个字母表示,那么这将推入标点符号的数量。因此,需要特殊的编纂来检查。如果pass[count]
是88,字符'X',则手动设置为'A',数字65.如果它增加3,它将变为91,即字符,'['。
代码中存在一些缺点,因为它只支持字母。如果标点符号在pass
字符串中,则从用户的角度来看,它们将被更改为另一个随机标点符号。