我无法弄清楚我的代码有啥问题

Posted

技术标签:

【中文标题】我无法弄清楚我的代码有啥问题【英文标题】:I can't figure out what's wrong with my code我无法弄清楚我的代码有什么问题 【发布时间】:2019-10-04 17:44:38 【问题描述】:

我正在尝试制作一个程序,该程序采用编码消息并解码 Rot 13 和 Rot 6 密码。 Rot 13 部分工作得很好,但 Rot 6 部分只在特定情况下工作(输入“Yngqkt, tuz yzoxxkj”应该转换为“Shaken, not Stirring”,而是返回为“Yhmkqn not 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;

【问题讨论】:

工具栏上有一个标题为“代码示例”的按钮,用于格式化选定的代码块。它看起来像 您最好使用'a' 和其他字符文字,而不是定义自己的常量,例如lCaseA。文字 'a' 在大多数平台(显然是你的平台)上具有 97 的值。 input[index] &lt;= uCaseN 看起来可能是倒退了。 只写一个rot 以旋转大小为参数的函数会更容易。 【参考方案1】:

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

如果您 ROT6 “摇晃,未搅拌”,您会得到“Yngqkt,tuz yzoxxkj”,但当您再次 ROT6 时,您将不会再收到“摇晃,未搅拌”。检查https://rot13.com/。

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

【讨论】:

以上是关于我无法弄清楚我的代码有啥问题的主要内容,如果未能解决你的问题,请参考以下文章

搞砸了主 git 分支......无法弄清楚我需要恢复啥

PJSIP iOS 错误

我试图找出 .csv 文件的最大值和最小值,但我无法弄清楚我做错了啥

有人可以帮我弄清楚我的查询是不是有误吗?

我如何弄清楚我的 If 语句使用啥。当我想识别我正在使用 Browserstack

无法使用 JSONDecoder 返回或解码数据