Ok, przede wszystkim zmienne globalne których nie powinieneś używać, praktycznie nigdy. Stąd prosty wniosek, że twoje funkcje powinny przyjmować argumenty. W ogóle cały pomysł na szyfrowane, a raczej jego wykonanie jest złe, trudne do utrzymania i niejasne. Jeżeli już chcesz mieć takie szyfrowanie gdzie z góry masz przypisaną jedną literę do drugiej ( co też nie jest dobrym pomysłem) to zamiast dziesiątek ifów lepiej zrobić sobie jakiś kontener z parami liczb (np.
vector < pair < char, char > >
gdzie na początku programu będziesz do niego wpisywał te twoje pary znaków. To ci da 2 korzyści, każdą parę liter będziesz miał w 1 miejscu zamiast w 4 (szczególnie przydatne jeżeli nagle będziesz chciał zmienić przypisanie liter) oraz znacząco uprości kod. Dodatkowo nie ma potrzeby sprawdzania zarówno liter małych jak i wielkich (w ifach), jeżeli chcesz zachować wielkość liter to wystarczy dodać jakąś flagę która po szyfrowaniu/deszyfrowaniu będzie zmieniała literę na taką jaka była wcześniej. Podsumowując moim zdaniem powinno to wyglądać mniej więcej tak:
szyfrowanie:
1. dla każdego znaku w tekście
2. sprawdź czy aktualny znak jest wielką literą, jeżeli tak to zapiszą tą informację
3. znajdź w kontenerze parę liter
4. zamień aktualna literę na małą
5. przypisz pod aktualny znak literę z pary
6. jeżeli zapisałeś informację, że trzeba zmienić literę to ja zamień na wielką
analogicznie będzie dla deszyfrowania tylko będziesz znajdował parę liter w kontenerze patrząc na drugą a nie pierwszą i przypisywał do aktualnej pierwszą.
Przydadzą ci się funkcje z pliku
cctype w szczególności isupper(), toupper().
Dodam jeszcze, że uważam rozwiązanie z continue za raczej słabe, powinno to być else if a najlepiej switchem.