#include <iostream> #include <cstring> #include <cmath> using namespace std; int main() { string s = "ala ma kota a kot ma ale"; string result = ""; int matrix_size = ceil(sqrt(s.size())); char matrix[matrix_size][matrix_size]; for (int i=0; i<matrix_size; i++) { for (int j=0; j<matrix_size; j++) { if ((i*matrix_size)+j >= s.length()) { matrix[i][j] = '_'; continue; } matrix[i][j] = (s[(i*matrix_size)+j] == ' ' ? '_' : s[(i*matrix_size)+j]); } } for (int i=0; i<matrix_size; i++) { for (int j=0; j<matrix_size; j++) result += matrix[j][i]; } cout << "Tekst zaszyfrowany: " << result << endl; return 0; }
Zacznijmy od linii 15. Tam do wcześniej zdefiniowanego stringa wpisywany jest tekst, który chcemy zaszyfrować. Następnie obliczana jest długość tekstu (linia 17), zaś na jej podstawie program wylicza ilość kolumn i wierszów macierzy (linia 18), w której będzie umieszczony tekst. Funkcja sqrt() liczy pierwiastek z podanej liczby, natomiast ceil() zaokrągla w górę liczbę podaną jako argument. W linii 20 definiujemy macierz, do której następnie wpiszemy tekst do zaszyfrowania.
W liniach 23 - 29 mamy pętle, które wierszami, po jednej literce zapełniają każdą komórkę macierzy. Spacje zamieniane są na podkreślnik. Gdy ilość komórek jest większa od ilości znaków w tekście, końcowe komórki macierzy również są wypełniane podkreślnikami. Po wypełnieniu macierzy znakami w liniach 32 - 37 tekst z tablicy jest spisywany kolumnami do stringa result. W linii 40 na urządzenie wyjścia wypisywany jest zaszyfrowany tekst.
Jest to chyba najprostszy możliwy sposób w jaki można zaimplementować algorytm szyfrowania przestawieniowego.