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:
- Pe prima linie un text format din maxim
256
caractere. - Pe a doua linie un număr
n
reprezentând numărul de poziții. - 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.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema CaesarCrypt:
//C++11
#include <fstream>
#include <string> //biblioteca specifica C++ pentru a lucra cu string-uri. A nu se confunda cu <cstring>.
using File = std::fstream; //creem un alias
File in, out; //declaram stream-urile
std::string textin, op, textout;
int n;
int main()
{
in.open("caesar.in", File::in); //deschidem stream-ul de intrare.
out.open("dbftbs.out", File::out | File::trunc); //deschidem stream-ul de iesire.
std::getline(in, textin); //citim prima textul.
in>>n>>op; //citim numarul si operatia.
n%=26; //26 caractere in alfabetul englez.
if(op=="encrypt")
{
for(char c : textin) //structura for_each din C++11. Inlocuieste for(int i=0; i<textin.size(); i++){...textin[i]...}. A nu se confunda cu std::for_each din <algorithm>.
{
if(std::isspace(c) || !std::isalpha(c)) textout+=c; //verificam daca e litera.
else if(std::isupper(c)) textout+=(char)(((int)(c)+n-65)%26+65); //
else textout+=(char)(((int)(c)+n-97)%26+97); // convertim caracterul.
}
}
if(op=="decrypt")
{
for(char c : textin) //structura for_each din C++11. Inlocuieste for(int i=0; i<textin.size(); i++){...textin[i]...}. A nu se confunda cu std::for_each din <algorithm>.
{
if(std::isspace(c) || !std::isalpha(c)) textout+=c; //verificam daca e litera.
else if(std::isupper(c)) textout+=(char)(((int)(c)-65+26-n)%26+65); //
else textout+=(char)(((int)(c)-97+26-n)%26+97); //aplicam acceasi operatie ca si la encrypt iar 'n' devine '26-n'.
}
}
out<<textout; //afisam textul prelucrat
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2615 CaesarCrypt
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2615 CaesarCrypt de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!