我正在学习如何使自己成为简单的XOR加密。但是,为了使一个人更难以破译消息我想尝试交换字符然后交换它们(在用户输入密钥进行解密之后)。
这是我的输出:
yet ih ssia t se!t !
ey this is a test!!
有谁知道为什么它会在第二次打印输出中切断h
?我还很擅长编程,花了一个小时试图解决这个问题。
这是我的代码:
#include <cstring>
#include <string>
#include <iostream>
using namespace std;
void doSwap (char &string1, char &string2) {
char temp;
temp = string1;
string1 = string2;
string2 = temp;
}
int main() {
string content = "hey this is a test!!";
string after, after2;
int i;
for (i = 0; i < content.size(); i+=2) {
doSwap(content[i], content[i+2]);
}
after = content;
cout << after << "\n";
for (i = after.size(); i > 0; i -=2) {
doSwap(after[i], after[i-2]);
}
after2 = after;
cout << after2 << "\n";
}
答案 0 :(得分:0)
您的循环索引不正确。正如@tadman指出的那样,你将走出弦乐。
第一个循环必须终止比大小短的2个索引,因此当你添加2时,它将比content.size()小1。记住C / C ++是0索引的,因此如果size是10,则元素9是字符串的最后一个索引。
for (i = 0; i < content.size()-2; i+=2) {
doSwap(content[i], content[i+2]);
}
类似地,第二个循环应该从大小开始1并终止于2,所以当你索引到i-2
时,你的索引不小于0。
for (i = after.size()-1; i >= 2; i -=2) {
doSwap(after[i], after[i-2]);
}