Szyfr cezara zmieniający znaki tylko na litery

0

Mam taki kod szyfrujący tekst, cos na zasadzie szyfru cezara. Co zrobić, aby zamieniał on tylko na litery, a nie wszystkie znaki dostępne na klawiaturze. Obrazki poniżej.

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string szyfrogram, odkodowany;
  int klucz, dl;
  char kod;

  cout <<"Podaj szyfrogram do odkodowania:";
  cin >> szyfrogram;

  cout <<"Podaj klucz szyfrujący:";
  cin >> klucz;

  dl = szyfrogram.length();

  cout << "Odkodowywanie:" << endl;

  for (int i=0; i < dl; i++)
    {
      kod = szyfrogram[i] + klucz;
      cout << szyfrogram[i] << " -> " << int(kod) << endl;
      odkodowany += kod;
    }

  cout << "Odkodowany tekst: " << odkodowany << endl;

  return 0;
}

2

Jak byś chciał, żeby przebiegała taka zmiana? Tzn. przesuwasz, powiedzmy, literę z do przodu o trzy jednostki — na co ma się zamienić?

Sensowną opcją będzie, na przykład, zapętlenie — tzn. z z się zrobi c. Jeśli tak, to zastosuj odpowiednio dzielenie modulo — %.

0

aby zamieniał on tylko na litery, a nie wszystkie

Kody ASCII i lecisz ifem, tj. kazdej literze odpowiada jakas cyfra

1
czy znak jest literą?
   jeśli tak to podmień literę A na D, B na E, .... X na A, Y na B, Z na  C
   w przeciwnym razie nic nie rób
weź kolejną literę.

Radziłbym też poprawić program dzieląc go na mniejsze funkcje:

char cezar(char ch, int klucz)
{
    ...
}

std::string cezar(std::string s, int klucz)
{
    for (auto& ch : s) {
        ch = cezar(ch, klucz);
    }
    return s;
}

Jak w języku naturalnym, lepiej się kogoś rozumie, jak używa prostych zdań, a nie wielokrotnie złożone.

1 użytkowników online, w tym zalogowanych: 0, gości: 1