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本身是按预期工作的。事实上,如果我只是直接+13转换ASCII而不回绕到'A',代码工作正常。但是,只要我将if语句三合并,我开始得到两个不正确的输出,并阻止我以后解密。例如:
输入字符串:“这就是我所有的一切”
给出输出:“GUHVIF VIF NAYLYL VI TGBGF”
T = G
H = UH
I = VI
S = F
拜托,我错过了什么/俯视???
答案 0 :(得分:4)
您只需要执行if
个语句中的一个,因此请确保在else
子句中有后两个:
if(x==32) // keep spaces
{
cryptStr = cryptStr + (char)x;
}
else if((x>=65) && (x<=77)) // rotate 'A' through 'M' by +13
{
x=x+13;
cryptStr = cryptStr + (char)x;
}
else if((x>77) && (x<=90)) // rotate 'N' through 'Z' by -26+13=-13
{
x=x-13;
cryptStr = cryptStr + (char)x;
}
现在你的方式,如果第二个if
被执行,那么x
增加13,这使得第三个if条件评估为真。