返回列表 發帖

202412新手3-凱撒密碼 (Cipher)

問題敘述
你最近了解到一些加密方式,其中最常見的就是凱撒密碼。這種加密方法非常簡單:將明文中的每個字母按字母表順序向後移動固定位數k,移動到字母表末尾後再從頭開始。例如,若k=3,則A會被加密成D,X會被加密成A,以此類推。 現在,你的任務是實現這種加密方法。本題只加密字母,並保持大小寫不變。非字母字符則保持不變。


附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
May

  1. #include <bits/stdc++.h>
  2. //#include <iostream>
  3. //#include <string>
  4. using namespace std;

  5. string caesarCipher(string s, int k) {
  6.     string result = "";  // 儲存加密後的字串
  7.     k %= 26;             // 將位移值限制在 0~25

  8.     for (char c : s) {
  9.         if (isalpha(c)) {  // 如果是字母
  10.             char base = islower(c) ? 'a' : 'A';  // 判斷是小寫還是大寫
  11.             // 計算新字元,按位移加密
  12.             char encryptedChar = base + (c - base + k) % 26;
  13.             result += encryptedChar;
  14.         } else {
  15.             // 非字母字元保持不變
  16.             result += c;
  17.         }
  18.     }

  19.     return result;
  20. }

  21. int main() {
  22.     // 輸入字串 S
  23.     string S;
  24.     getline(cin, S);  // 使用 getline 讀取含空白的整行字串

  25.     // 輸入位移數 k
  26.     int k;
  27.     cin >> k;

  28.     // 加密字串並輸出
  29.     string encrypted = caesarCipher(S, k);
  30.     cout << encrypted << endl;  // 確保有輸出結果

  31.     return 0;
  32. }
  33. /*
  34. 輸入範例1
  35. Hello,World!
  36. 3
  37. 輸出範例1 Khoor,Zruog!

  38. 輸入範例2
  39. This is 'plaintext'.
  40. 7
  41. 輸出範例2 Aopz pz 'wshpualea'.

  42. */
複製代碼
May

TOP

返回列表