作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
1、背景 1. 讲故事 10月份星球里的一位老朋友找到我,说他们公司的程序在一个网红直播带货下给弄得无响应了,无响应期间有大量的 RabbitMQ 超时,寻求如何找到根源,聊天截
从list1创建子列表(即list3)后,我在list3上调用clear()方法,期望list3将被清除而 list1 将保持不变。然而,结果清楚地表明 list1 也已更改。为什么会发生这种情况?
我是一名优秀的程序员,十分优秀!