標題:
202412新手3-凱撒密碼 (Cipher)
[打印本頁]
作者:
may
時間:
2025-1-27 22:46
標題:
202412新手3-凱撒密碼 (Cipher)
問題敘述
你最近了解到一些加密方式,其中最常見的就是凱撒密碼。這種加密方法非常簡單:將明文中的每個字母按字母表順序向後移動固定位數k,移動到字母表末尾後再從頭開始。例如,若k=3,則A會被加密成D,X會被加密成A,以此類推。 現在,你的任務是實現這種加密方法。本題只加密字母,並保持大小寫不變。非字母字符則保持不變。
[attach]20605[/attach]
[attach]20606[/attach]
[attach]20607[/attach]
作者:
may
時間:
2025-1-27 22:50
#include <bits/stdc++.h>
//#include <iostream>
//#include <string>
using namespace std;
string caesarCipher(string s, int k) {
string result = ""; // 儲存加密後的字串
k %= 26; // 將位移值限制在 0~25
for (char c : s) {
if (isalpha(c)) { // 如果是字母
char base = islower(c) ? 'a' : 'A'; // 判斷是小寫還是大寫
// 計算新字元,按位移加密
char encryptedChar = base + (c - base + k) % 26;
result += encryptedChar;
} else {
// 非字母字元保持不變
result += c;
}
}
return result;
}
int main() {
// 輸入字串 S
string S;
getline(cin, S); // 使用 getline 讀取含空白的整行字串
// 輸入位移數 k
int k;
cin >> k;
// 加密字串並輸出
string encrypted = caesarCipher(S, k);
cout << encrypted << endl; // 確保有輸出結果
return 0;
}
/*
輸入範例1
Hello,World!
3
輸出範例1 Khoor,Zruog!
輸入範例2
This is 'plaintext'.
7
輸出範例2 Aopz pz 'wshpualea'.
*/
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2