C++ROT-13给出了我没想到的结果
C++ ROT-13 gives result I did not expect
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;
}
问题是,如果语句一和语句二按自己的意图工作。事实上,如果我只是对ASCII进行+13的直接换位,而不返回到"a",那么代码就可以正常工作。但是,一旦我包含if语句三,我就开始得到两个不正确的字母输出,这使我以后无法解密。例如:
输入字符串:"这就是我得到的全部"
输出:"GUHVIF VIF NAYLYL VI TGBGF"
T=G
H=呃
I=VI
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的条件求值为true。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 用C++20 fmt限制结果的总大小
- ifstream什么都没读
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- C++ROT-13给出了我没想到的结果
- 从文件中读取返回我没想到的结果,试图理解为什么