C++ROT-13给出了我没想到的结果

C++ ROT-13 gives result I did not expect

本文关键字:没想到 结果 C++ROT-13      更新时间:2023-10-16

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。