我正在尝试制作一个接受编码消息并解码Rot 13和Rot 6密码的程序。 Rot 13部分可以正常工作,但Rot 6部分仅在特定情况下有效(输入“Yngqkt,tuz yzoxxkj”应转换为“Shaken,而不是搅动”,而是返回“Yhmkqn而不是stirrqp”)

const int lCaseA = 97;
const int lCaseM = 109;
const int lCaseN = 110;
const int lCaseZ = 122;
const int uCaseA = 65;
const int uCaseM = 77;
const int uCaseN = 78;
const int uCaseY = 89;
const int uCaseZ = 90;


string rot6(string input) {
 int inputSize = input.size();
 int index{};

 while (index != inputSize) {
  if (input[index] >= lCaseA && input[index] <= lCaseM)
   input[index] = input[index] + 6;
  else if (input[index] >= lCaseN && input[index] <= lCaseZ)
   input[index] = input[index] - 6;
  else if (input[index] >= uCaseA && input[index] <= uCaseM)
   input[index] = input[index] + 6;
  else if (input[index] <= uCaseN && input[index] <= uCaseZ)
   input[index] = input[index] - 6;
  index++;
 }
 return input;
}

string rot13(string input) {  //Decodes into rot 13
 int inputSize = input.size();
 int index{};
 while (index != inputSize) {
  if (input[index] >= lCaseA && input[index] <= lCaseM)
   input[index] = input[index] + 13;
  else if (input[index] >= lCaseN && input[index] <= lCaseZ)
   input[index] = input[index] - 13;
  else if (input[index] >= uCaseA && input[index] <= uCaseM)
   input[index] = input[index] + 13;
  else if (input[index] <= uCaseN && input[index] <= uCaseZ)
   input[index] = input[index] - 13;
  index++;
 }
 return input;
}


int main() {
 string plaintext;
 string ans13;
 string ans6;
 string ansCoffee;

 cout << "Whats the message Spy Guy: ";
 getline(cin, plaintext);
 ans13 = rot13(plaintext);
 ans6 = rot6(plaintext);

 cout << "One of these is your decoded message" << endl << "In Rot 13:  " << ans13 << endl << "In Rot 6:  " << ans6 << endl;
 return 0;
}

最佳答案

只有ROT13是可逆的,因为它移动了字母大小的一半。

如果您对ROT6进行“摇晃,不搅动”,则会得到“Yngqkt,tuz yzoxxkj”,但是当您再次进行ROT6时,您将不会得到“晃动,不搅动”。检查https://rot13.com/

而且您对ROT6的实现也是错误的。您仅使用了ROT13实现,并将13更改为6。但是ROT13的实现依赖于13是字母大小的一半的事实。对于ROT6而言并非如此。如果要在ROT6实现中使用相同的模式,则必须不将字母表分为两半,而应分为a-tu-z范围。如果输入字母属于第一个范围,则添加6;如果输入字母属于第二个范围,则减去20

关于c++ - 我无法弄清楚我的代码出了什么问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58241043/

10-13 00:55