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

标签 c++ encryption rot13

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 语句一和二按它们自己的预期工作。事实上,如果我只是直接对 ASCII 进行 +13 转置而不回绕到“A”,代码就可以正常工作。但是,一旦我合并了 if 语句三,我就开始得到不正确的两个字母的输出,并阻止我以后解密。例如:

输入字符串:“THIS IS ALL I GOTS”

给出输出:“GUHVIF VIF NAYLYL VI TGBGF”

T = G

H = 嗯

我=六

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

关于C++ ROT-13 给出了我没想到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437179/

相关文章:

c++ - 为原始类型重载 operator<<。那可能吗?

c++ - 每当我尝试获取程序的结果时,调试实验室都会在我看到结果之前退出

c++ - 用C++编译gpsd客户端

linux - 汇编中的 ROT13 密码

c++ - 如何初始化一个指向结构体指针数组的变量?

c - Openssl 中的 ECB、CFB、OFB 密码模式

.net - 使用 .NET 加密 API 的盲 RSA 签名?

C 中的凯撒密码有时只有效?

代码无效,代码不可访问

python - 为什么 python-3.x 删除了 ROT-13 作为编码?