2016-04-20 78 views
0

我正在學習如何使自己成爲一個簡單的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

您可以輕鬆地走下那裏的字符串結束。 '我 tadman

回答

0

你的循環索引是不正確的。正如@tadman指出的那樣,你會走出這個字符串。

第一個循環將不得不終止比尺寸更短的兩個索引,這樣當你添加2時,它將比content.size()少1。請記住C/C++是0索引,因此如果大小爲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]); 
    }