2017-10-04 58 views
-4
#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

void shiftLeft (char myarray[], int size, int shiftBy) 
{ 
    if(shiftBy > size){ 
     shiftBy = shiftBy - size; 
    } 

    if(size == 1){ 
     //do nothing 
    } 
    else{ 
     char temp; 
     //for loop to print the array with indexes moved up (to the left) <-- by 2 
     for (int i=0; i < size-shiftBy; i++) 
     {//EXAMPLE shift by 3 for a c-string of 5 
      temp = myarray[i];//temp = myarray[0] 
      myarray[i] = myarray[i + shiftBy];//myarray[0] == myarray[2] 
      myarray[i + shiftBy] = temp;//myarray[2] = temp(value previously at index i) 
     } 

    } 
} 

int main() 
{ 
    char text[] = "OPAKMIGWPKBTWAQSZQABTAVWASZGETAATGCEWQEAVFZMHATXSOQLPAMOTZMIATXFWFKMQEMELWBHQZYPQJMFGEMLKTZQEOWAVARATXMXIABTKVAOUKDQFLTQZWDKMYMAFLPUFSULYGWMDLWELWBOQFZWGLIRSZYZWGKMZWIDTMFOMQFBTWEAGLESVPXZARMZDIWWBTWLMJSQKBQNMZAVSGNFZMKWIDZMSADQKPUKPMJVQKANWTXKIEZIWWBASAWANFZMDWQEKWYWUUKBMCMFZMAFTKGBTWZEGCZVAFZMEOMQHWRWIEQEUFLMFLPGEZQNXSSQLPQOWAVAMJMXGDQDGPSZWSVPVMQHJGLQTSDQHZAEQEWAFGSQWXMFLYATQKBAYWNWNAJMUKTQWXMFLYATQKBAYWNWNAJMUKTQWX" ; 
    char textTwo[] = "OPAKMIGWPKBTWAQSZQABTAVWASZGETAATGCEWQEAVFZMHATXSOQLPAMOTZMIATXFWFKMQEMELWBHQZYPQJMFGEMLKTZQEOWAVARATXMXIABTKVAOUKDQFLTQZWDKMYMAFLPUFSULYGWMDLWELWBOQFZWGLIRSZYZWGKMZWIDTMFOMQFBTWEAGLESVPXZARMZDIWWBTWLMJSQKBQNMZAVSGNFZMKWIDZMSADQKPUKPMJVQKANWTXKIEZIWWBASAWANFZMDWQEKWYWUUKBMCMFZMAFTKGBTWZEGCZVAFZMEOMQHWRWIEQEUFLMFLPGEZQNXSSQLPQOWAVAMJMXGDQDGPSZWSVPVMQHJGLQTSDQHZAEQEWAFGSQWXMFLYATQKBAYWNWNAJMUKTQWXMFLYATQKBAYWNWNAJMUKTQWX"; 
    string OG="OPAKMIGWPKBTWAQSZQABTAVWASZGETAATGCEWQEAVFZMHATXSOQLPAMOTZMIATXFWFKMQEMELWBHQZYPQJMFGEMLKTZQEOWAVARATXMXIABTKVAOUKDQFLTQZWDKMYMAFLPUFSULYGWMDLWELWBOQFZWGLIRSZYZWGKMZWIDTMFOMQFBTWEAGLESVPXZARMZDIWWBTWLMJSQKBQNMZAVSGNFZMKWIDZMSADQKPUKPMJVQKANWTXKIEZIWWBASAWANFZMDWQEKWYWUUKBMCMFZMAFTKGBTWZEGCZVAFZMEOMQHWRWIEQEUFLMFLPGEZQNXSSQLPQOWAVAMJMXGDQDGPSZWSVPVMQHJGLQTSDQHZAEQEWAFGSQWXMFLYATQKBAYWNWNAJMUKTQWXMFLYATQKBAYWNWNAJMUKTQWX"; 
    int size =OG.length(); 
    int count = 0; 
    ofstream outputFile("info.txt"); 
    for (int i =1; i<size+1;i++){ 
     shiftLeft(text,size,i); 
     string name="OPAKMIGWPKBTWAQSZQABTAVWASZGETAATGCEWQEAVFZMHATXSOQLPAMOTZMIATXFWFKMQEMELWBHQZYPQJMFGEMLKTZQEOWAVARATXMXIABTKVAOUKDQFLTQZWDKMYMAFLPUFSULYGWMDLWELWBOQFZWGLIRSZYZWGKMZWIDTMFOMQFBTWEAGLESVPXZARMZDIWWBTWLMJSQKBQNMZAVSGNFZMKWIDZMSADQKPUKPMJVQKANWTXKIEZIWWBASAWANFZMDWQEKWYWUUKBMCMFZMAFTKGBTWZEGCZVAFZMEOMQHWRWIEQEUFLMFLPGEZQNXSSQLPQOWAVAMJMXGDQDGPSZWSVPVMQHJGLQTSDQHZAEQEWAFGSQWXMFLYATQKBAYWNWNAJMUKTQWXMFLYATQKBAYWNWNAJMUKTQWX"; 
     for(int j=0;j<size;j++){ 
      if(text[j]==textTwo[j]) 
      count++; 
     } 
     outputFile <<"Shift right by: " << 422-i << " Coincidences: " << count <<"text:" <<text <<endl; 
     strcpy_s(text, name.c_str()); 
     count = 0; 
    } 
outputFile.close(); 
    return 0; 
} 

我的目標是在這裏破解Vigen`ere密碼,但我需要做以下operrationg從0開始的位轉移到文本的大小,並檢查轉移和原文本匹配起來,他們匹配的最大值給我的鑰匙空間,但我的代碼不工作正確的,左移似乎沒有工作,但我對小本投入測試,它適用於小本投入很好..移通過留下一個數組withh給定值

+0

_「我不知道我的錯誤在哪裏......」_實際上有什麼問題?編譯器錯誤?運行時錯誤?意外的輸出? – user0042

+0

再次檢查desc,我添加了更多詳細信息 –

+0

沒有足夠的細節。提供一個[MCVE],在用調試器逐步執行代碼時顯示您的觀察結果。 – user0042

回答

0

陣列可通過移動元素或改變索引來移動。

通過移動元件移 重複每個時隙:

array[i] = array[i+1]; 
// or 
array[i+1] = array[i]; 

旋轉通過移動元件

i = 0; 
carry_value = array[i]; 
// Loop: 
array[i] = array[i+1]; 
// end loop 
array[last_slot] = carry_value; 

甲凱撒加密的工作原理是改變的索引值:

new_value = array[(index + offset) % array_capacity]; 
相關問題