我无法弄清楚我的代码出了什么问题

时间:2019-10-04 17:44:38

标签: c++

我正在尝试制作一个程序,该程序采用编码消息并解码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;
}

1 个答案:

答案 0 :(得分:0)

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

如果您将ROT6“摇晃,不搅动”,您将得到“ Yngqkt,图兹yzoxxkj”,但是再次使用ROT6时,您将不会得到“摇晃,不搅动”。选中https://rot13.com/

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