-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;
}

My goal is here to crack The Vigen`ere Cipher but i need to do the following operrationg shift the bits starting from 0 to size of text and check if the shifted and original text match up, the maximum value that they match up gives me the key space but my code doesnt work proper, shifting left seems to not work but i have tested on small inputs it works fine on small inputs..

shiv zuh
  • 125
  • 11
  • _"i dont know where my mistake is...."_ What is the problem actually? Compiler errors? Runtime errors? Unexpected output? – user0042 Oct 04 '17 at 19:57
  • check the desc again, i added more details – shiv zuh Oct 04 '17 at 19:58
  • Not enough details. Provide an [MCVE], show your observations when stepping through your code with the debugger. – user0042 Oct 04 '17 at 19:59
  • I'm not at all sure I understand what you're trying to do, but if it doesn't work for large "shiftBy" inputs, is it because you're only checking shiftBy > size once? I mean, I would think you would want something more like "while (shiftBy >= size) { shiftBy -= size; }" at the top of your function. – EdmCoff Oct 04 '17 at 20:09
  • Move your `temp =` statement to before the `for` loop. Otherwise it looks like a *swap* pattern. – Thomas Matthews Oct 04 '17 at 20:28

1 Answers1

0

Arrays can be shifted either by moving elements or changing the index.

Shifting by moving elements Repeat for every slot:

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

Rotating by moving elements

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

A Caesar Cipher works by changing the index value:

new_value = array[(index + offset) % array_capacity];
Thomas Matthews
  • 56,849
  • 17
  • 98
  • 154