[C++] Szyfrowanie metoda płotu - problem z pustymi komórkami


(Lisiornik) #1

Witam. Mam problem z kmórkami, w których twki pustka (?) czy może spacja... Program szyfrujący wpisuje mi je do tabeli i potem wypisuje je w haszu, a chcialbym by hasz był jednolitym wyrazem pozbawionym spacji. Tutaj demonstruję mniej więcej o co mi chodzi: (spacje o których pisaelm zaznaczylem jako czerwone kropki)

zrzutekranupv.png

kod:

#include 

#include 

#include 


char wprowadz[1024];

int wypisywacz=0;

char tablica[64][1024];

int klucz;

using namespace std;


int main()

{

  cout "Wprowadz wyrazenie do zaszyfrowania: ";

  cin.getline(wprowadz,1024);

  int len=strlen(wprowadz);

  cout "Wyraz ten ma " len " znakow/ki.";

  cout endl;

  cout "Wprowadz ilosc rzedow plotu: ";

  cin klucz;

  cout endl;

  cout "Tak wyglada tablica po wprowadzeniu danych: " endl endl;


  //Wpisywanie wyrażenia w tablice

  for(int a=0; a
    {

      for(int i=0; i
        {

          if(wprowadz[wypisywacz]!=' ' and wprowadz[wypisywacz]!=0)

            {

              tablica[i][a]=wprowadz[wypisywacz];

            }

          wypisywacz++;

        }

    }


  //Wypisywanie tablicy na ekran

  for(int pion=0; pion
    {

      for(int poziom=0; poziom
        {


            cout tablica[pion][poziom];

        }

      cout endl;

    }

  cout endl;

  cout "Zaszyfrowany hasz: ";


  //Wypisywanie hasza na ekran

  for(int pion=0; pion
    {

      for(int poziom=0; poziom
        {

          cout tablica[pion][poziom];

        }


    }

  cout endl endl;

  cout "Ponownie odszyfrowane wyrazenie: ";


//Wypisywanie odszyfrowanej wiadomości

  for(int pion=0; pion
    {

      for(int poziom=0; poziom
        {

          cout tablica[poziom][pion];

        }


    }

  cout endl endl endl;

  cout "Koniec, wpisz dowolny znak i nacisnij enter.";

char chary;

  cin chary;

  return 0;

}

(Xeon Bloomfield) #2

Nie są to spację, a znaki spacji ("Dec" = 32):

#include 


using namespace std;


int main()

{

int i = 32;

cout << (char) i << endl;

return 0;

}

Niestety bez rozbudowy skryptu nie obejdzie się bez nich. Polecam tekst tutaj:http://en.wikipedia.org/wiki/ASCII#ASCII_printable_charactersJak wiadomo char rzutowany na int'a daje liczbę z tabelki "Dec". Przykładowo wyjście tego programu:

#include 


using namespace std;


int main()

{

int i = 65;

cout << (char) i << endl;

return 0;

}

To duża litera A.

Problem jest w tym, że przesuwasz w swoim programie wszystko. Jest to jednak najlepsze proste rozwiązanie.


(dobryteddy) #3

A nie można zrobić tak ? :

//Wypisywanie odszyfrowanej wiadomości

  for(int pion=0; pion
    {

      for(int poziom=0; poziom
        {

          if(tablica[poziom][pion] == (char)" "){

            /*nic nie wypisuj*/ } 

          else {

            cout << tablica[poziom][pion]; }

        }

    }

([alex]) #4

dobryteddy , oczywiście że nie można, bo szyfrowanie robi się po to aby później rozszyfrować (przynajmniej tym szyfrem).

Rozwiązanie jest następujące, do wyniku doklejasz z przodu długość napisu, znaki z poza napisu losujesz ze znaków samego napisu.

Po rozszyfrowaniu i tak zostaną odrzucone.