2017-10-04 57 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]; 
相关问题