fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <cctype> // dla islower
  4. using namespace std;
  5.  
  6. /**
  7.  * Funkcja szyfruje tekst małymi literami alfabetu łacińskiego.
  8.  * Pozycje parzyste szyfrowane są kluczem klucz1, a nieparzyste kluczem klucz2.
  9.  * @param tekst - wejściowy ciąg małych liter
  10.  * @param klucz1 - przesunięcie dla pozycji parzystych
  11.  * @param klucz2 - przesunięcie dla pozycji nieparzystych
  12.  * @return zaszyfrowany tekst
  13.  */
  14. string szyfruj2(const string &tekst, int klucz1, int klucz2) {
  15. string wynik = tekst;
  16.  
  17. // Redukujemy klucze do zakresu 0-25
  18. klucz1 = ((klucz1 % 26) + 26) % 26;
  19. klucz2 = ((klucz2 % 26) + 26) % 26;
  20.  
  21. for (size_t i = 0; i < tekst.size(); i++) {
  22. char c = tekst[i];
  23. if (!islower(c)) {
  24. throw invalid_argument("Tekst może zawierać tylko małe litery alfabetu łacińskiego.");
  25. }
  26. int przesuniecie = (i % 2 == 0) ? klucz1 : klucz2;
  27. // Szyfr Cezara
  28. wynik[i] = char('a' + ( (c - 'a' + przesuniecie) % 26 ));
  29. }
  30. return wynik;
  31. }
  32.  
  33. int main() {
  34. try {
  35. cout << szyfruj2("poufnytekst", 3, 10) << endl; // oczekiwane: zreixbdhuvd
  36. cout << szyfruj2("poczekajnamnie", 123, 5) << endl; // oczekiwane: uhhsjdfcstrgnx
  37. }
  38. catch (const exception &e) {
  39. cerr << "Błąd: " << e.what() << endl;
  40. }
  41. return 0;
  42. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
syxpqiwoncw
itvexptogffsbj