gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:55:44 25 4
gpt4 key购买 nike

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/

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