Szyfrowanie polega na zapisie tekstu jawnego w postaci węża, a następnie odczytanie każdej linijki po kolei. Węża tworzymy zapisując pierwszą literę w dolnej linijce. Następną linijkę wyżej. Następną też, ale dwie kolejno o linijkę niżej. Przepisywanie powtarzamy, aż przepiszemy wszystkie litery.
Weźmy przykładowo wyrażenie TAJNA INFORMACJA i zapiszmy w postaci "węża":
Wszystkie znaki interpunkcyjne oraz spacje usuwamy. Po odpowiednim zapisaniu możemy odczytać szyfrogram - odczytujemy kolejne linijki "węża": JNMA ANIFRAJ TAOC.
Chcąc odszyfrować nasz tekst należy pamiętać, że pierwsza litera jest w ostatnim wyrazie i znajduje się w lewym dolnym rogu. Kolejna litera leży w drugim wyrazie, trzecia w pierwszym, czwarta w drugim itd.
Spróbujemy teraz napisać funkcję, która zaszyfruje wprowadzony tekst i go wypisze na ekran. Przykładowo dla tekstu:
otrzymamy szyfrogram:
Napiszemy na początek funkcję ifLetter(), która będzie sprawdzać czy dany znak jest literą. Pozwoli to nam napisać bardziej elegancki kod i zwiększy przejrzystość do ewentualnego testowania:
(2.) Zwracamy wynik sprawdzania odpowiednich zakresów.
Nasza funkcja przyjmie tylko jeden argument txt, który będzie przechowywał tekst do zaszyfrowania:
(2.) Ustalamy długość tekstu dl wynikowego na 0. (3.) Stworzymy najpierw łańcuch znaków, który nie będzie zawierał żadnych spacji, znaków interpunkcyjnych oraz cyfr. (4.) Dla każdego znaku w tekście jawnym: (5.) sprawdzamy czy dany znak jest literą i jeśli tak jest to (6.) przepisujemy ten znak do tablicy tymczasowej i zwiększamy długość tekstu wynikowego.
(7.) Alokujemy pamięć pod tekst wynikowy. Zauważmy teraz, że pierwsza linijka węża to co czwarty znak począwszy od drugiego. Druga linijka to co drugi znak począwszy od drugiego znaku w tekście jawnym, a ostatnia linijka to co czwarty znak począwszy od pierwszego. Przepisywanie kolejnych linijek przeprowadzamy w linijkach (9. - 14.). (8.) Zmienna j pamięta, który znak tekstu tymczasowego przeglądamy, a następnie (9.) przepisujemy odpowiednio znaki pamiętając, że (10.) po każdej linijce dopisujemy znak przerwy - spacje. (15.) Dopisujemy na odpowiednim miejscu znak \0 i (16.) zwracamy wynik.
Podczas deszyfrowania zastosujemy metodę, którą szyfrowaliśmy:
Każdą linijkę odpowiednio rozszyfrowujemy. Warto zauważyć, że w tekście wynikowym nie ma spacji, ani znaków interpunkcyjnych, którymi musimy się przejmować.
Poniższa funkcja main() pozwala przetestować napisane funkcje:
Zmodyfikuj kod, aby wężyk nie zaczynał się od ostatniej, a od pierwszej linijki oraz, żeby można było szyfrować cyfry.
Przykładowo wężyk wyglądałby tak:
Przykładowo dla danych:
otrzymamy: