fbpx

Problema #2615 – CaesarCrypt – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se citește un text de maxim 256 caractere. Să se afișeze textul după aplicarea Cifrului Caesar.

Cifrul Caesar este o metodă de criptare în care fiecare literă este înlocuită cu o altă literă ce se află la un număr fix de poziții după aceasta în alfabet. Este numită după Julius Caesar, care o folosea în corespondența privată.

Date de intrare

Fișierul de intrare caesar.in conține:

Cerința

Se citește un text de maxim 256 caractere. Să se afișeze textul după aplicarea Cifrului Caesar.

Cifrul Caesar este o metodă de criptare în care fiecare literă este înlocuită cu o altă literă ce se află la un număr fix de poziții după aceasta în alfabet. Este numită după Julius Caesar, care o folosea în corespondența privată.

Date de intrare

Fișierul de intrare caesar.in conține:

  1. Pe prima linie un text format din maxim 256 caractere.
  2. Pe a doua linie un număr n reprezentând numărul de poziții.
  3. Pe a treia linie operația ce se va aplica pe text:
    • encrypt pentru criptare.
    • decrypt pentru decriptare.

Date de ieșire

Fișierul de ieșire dbftbs.out va conține textul prelucrat.

Restricții și precizări

  • 1 ≤ n ≤ 100
  • Se va folosi alfabetul englez. Literele își păstrează capitalizarea.
  • Atenție la exemple!

Exemple:

Exemplu #1

caesar.in

caesar
1
encrypt

dbftbs.out

dbftbs

Exemplu #2

caesar.in

dbftbs
1
decrypt

dbftbs.out

caesar

Exemplu #3

caesar.in

caeSaR
10
encrypt

dbftbs.out

mkoCkB

Exemplu #4

caesar.in

CAEsAr
10
decrypt

dbftbs.out

SQUiQh

Exemplu #5

caesar.in

If he had anything confidential to say, he wrote it in cipher, that is, by so changing the order of the 26 letters of the alphabet, that not a word could be made out.
7
encrypt

dbftbs.out

Pm ol ohk hufaopun jvumpkluaphs av zhf, ol dyval pa pu jpwoly, aoha pz, if zv johunpun aol vykly vm aol 26 slaalyz vm aol hswohila, aoha uva h dvyk jvbsk il thkl vba.
#include <bits/stdc++.h>

using namespace std;

ifstream cin("caesar.in");
ofstream cout("dbftbs.out");

char s[300], cer[20];
int n;

bool LM(char ch)
{
    return ch >= 'A' && ch <= 'Z';
}

bool lm(char ch)
{
    return ch >= 'a' && ch <= 'z';
}

int main()
{
    cin.getline(s, 260);
    cin >> n;
    cin >> cer;
    n=n%26;
    if(strcmp(cer, "encrypt") == 0)
    {
        int i = 0;
        while(s[i])
        {
            if(lm(s[i]) || LM(s[i]))
            {
                if(LM(s[i]))
                {
                    int nr = s[i] + n;
                    if(nr > 'Z')
                        s[i] = nr - 'Z' + 'A' - 1;
                    else
                        s[i] = nr;
                }
                else
                {
                    int nr = s[i] + n;
                    if(nr > 'z')
                        s[i] = nr - 'z' + 'a' - 1;
                    else
                        s[i] = nr;
                }
            }
            i++;
        }
        cout << s;
    }
    else
    {
        int i = 0;
        while(s[i])
        {
            if(LM(s[i]) || lm(s[i]))
            {
                if(LM(s[i]))
                {
                    s[i] = s[i] - n;
                    if(s[i] < 'A')
                        s[i] += 'Z' - 'A' + 1;
                }
                else
                {
                    s[i] = s[i] - n;
                    if(s[i] < 'a')
                        s[i] += 'z' - 'a' + 1;
                }
            }
            i++;
        }
        cout << s;
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa