打印出一个未打开的数组

时间:2016-04-20 21:18:11

标签: c++

我正在学习如何使自己成为简单的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";

 }

1 个答案:

答案 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]);
    }