Advertisement
akela43

код цезаря русских букв

Jan 14th, 2022
1,156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <locale>
  4. std::wstring funcSt(std::wstring str, int shift)
  5. {
  6.     // число, прибавляемое к каждой русской букве
  7.     const int  small_shift  = U'я' + shift + 1;
  8.     const int  big_shift  = U'Я' + shift + 1; // они одинаковы
  9.    
  10.     //  число букв в алфавите - нужно для случаев, когда после смещения буквы выходят из рус. алфавита
  11.     const int small_div = U'я' - U'а'  + 1;  // == 32
  12.     const int big_div = U'Я' - U'А'  + 1;  // == 32
  13.    
  14.     for (auto &x: str) {
  15.         if (U'а' <=x and x <= U'я')
  16.             x = (x  + small_shift) % small_div + U'а';
  17.         else if (U'А' <=x and x <= U'Я')
  18.             x = (x  + big_shift) % big_div + U'А';
  19.     }
  20.     return str;
  21. }
  22. int main()
  23. {
  24.     // из-за русских букв, в винде не обязательно
  25.     std::locale current_locale("");
  26.     std::locale::global(current_locale);
  27.     // закодированная строка и правильная первая буква
  28.     std::wstring str, letter;
  29.     std::getline(std::wcin, str);
  30.     std::getline(std::wcin, letter);
  31.    
  32.     std::wcout <<  funcSt(str, letter[0] - str[0]);
  33.    
  34.  
  35.  
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement