1

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

请问,我错过了什么/忽略了什么???

4

1 回答 1

4

您只需要if执行其中一个语句,因此请确保您有后两个 inelse子句:

  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 的条件评估为真。

于 2013-12-07T03:27:05.693 回答