[C++] Szyfr płot


(rafalski) #1

Witam! Mam problem przy zaimplementowaniu szyfra płotu. Przy krótszym tekscie i wysokości płotka 2 działa bez zarzutu. Potrzebuje płotka 5 i 11 znakowego wyrazu, może ktoś wie co robię nie tak?

#include 

#include 

#include 


using namespace std;


int main(int argc, char *argv[])

{

    std::string tekst= "CRYPTOGRAPHY"; //słowo niezakodowane

    string szyfr; //slowozakodowane

    int w=2; //wysokość płotka

    int index=0; 

    int dl=tekst.size(); 

    int pocz=0;

    for(int i=0; i
    {

            szyfr=szyfr+tekst[index];

            index=index+w;

            if (index>dl)

            {

                          pocz++;

                          index=pocz;

            }

    }

    std::cout << szyfr;


    system("PAUSE");

    return EXIT_SUCCESS;

}

(Tomek Matz) #2

Wcześniej nie spotkałem się z tym określeniem "szyfr płot", więc nie wiem, czy dobrze rozumiem co się kryje pod tym terminem. Anyway sprawdź ten kod i zobacz, czy o to Ci chodzi:

#include 

#include 


using namespace std;


int main(int argc, char *argv[])

{

    string tekst = "CRYPTOGRAPHY"; // tekst niezakodowany

    string szyfr; // tekst zakodowany

    string* d = NULL; // deski(?) w płotku

    unsigned int w = 5; // wysokość płotka


    if (w < tekst.size())

        d = new string[w];

    else

    {

        d = new string[tekst.size()];

        w = tekst.size();

    }


    unsigned int j = 0;

    for(unsigned int i = 0; i < tekst.size(); i++)

    {

        d[j] += tekst[i];

        if (j == w - 1)

            j = 0;

        else

            j++;

    }


    for (unsigned int i = 0; i < w; i++)

        szyfr += d[i];

    cout << szyfr << endl;


    cin.get();

    return 0;

}

([alex]) #3

Tylko jedno:

if (index>=dl)


(Tomek Matz) #4

Faktycznie, nie zauważyłem tego. No to ale przekombinowałem ten swój kod :smiley: