C++ 中字母的旋转 13 转置没有按我的预期工作。所有的字母都是大写的,所以只有 ASCII 数字 65-90 是相关的。如果字母超过 77,我减去以考虑回绕到“A”。
for (int j = 0; j < plainStr.length(); ++j)
{
int x = plainStr[j];
// if-statement one
if(x==32) // keep spaces
{
cryptStr = cryptStr + (char)x;
}
// if-statement two
if((x>=65) && (x<=77)) // rotate 'A' through 'M' by +13
{
x=x+13;
cryptStr = cryptStr + (char)x;
}
// if-statement three
if((x>77) && (x<=90)) // rotate 'N' through 'Z' by -26+13=-13
{
x=x-13;
cryptStr = cryptStr + (char)x;
}
问题是 if 语句 1 和 2 按他们自己的意图工作。事实上,如果我只是直接对 ASCII 进行 +13 转置而不回绕回“A”,那么代码就可以正常工作。但是,一旦我合并了 if 语句 3,我就开始得到不正确的两个字母的输出,并阻止我以后解密。例如:
输入字符串:“THIS IS ALL I GOTS”
给出输出:“GUHVIF VIF NAYLYL VI TGBGF”
T = G
H = 呃
我 = 六
S = F
请问,我错过了什么/忽略了什么???