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;
}
问题是,如果语句一和语句二按自己的意图工作。事实上,如果我只是对ASCII进行+13的直接换位,而不返回到"a",那么代码就可以正常工作。但是,一旦我包含if语句三,我就开始得到两个不正确的字母输出,这使我以后无法解密。例如:
输入字符串:"这就是我得到的全部"
输出:"GUHVIF VIF NAYLYL VI TGBGF"
T=G
H=呃
I=VI
S=F
拜托,我错过了什么/忽略了什么???
您只需要执行一个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的条件求值为true。