gpt4 book ai didi

c++ - 我不知道我的代码有什么问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:12 26 4
gpt4 key购买 nike

我正在尝试制作一个程序,该程序采用编码消息并解码 Rot 13 和 Rot 6 密码。 Rot 13 部分工作正常,但 Rot 6 部分仅在特定情况下有效(输入“Yngqkt,tuz yzoxxkj”应翻译为“Shaken,not stirred”但相反,它返回为“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;
}

最佳答案

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

如果您 ROT6“Shaken, not stirred”,您会得到“Yngqkt, tuz yzoxxkj”,但是当您再次 ROT6 时,您将不会得到“Shaken, not stirred”。检查https://rot13.com/ .

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

关于c++ - 我不知道我的代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58241043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com