#53609: c++程式+解析


yp11451295@yphs.tp.edu.tw (hello)

學校 : 不指定學校
編號 : 312799
來源 : [203.72.178.1]
最後登入時間 :
2025-10-02 17:42:33

 

c++程式+解析

#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
int k;
getline(cin,s);
cin>>k;
for(int i=0; i<s.size();i++){
if('A'<=s[i]&&s[i]<='Z') s[i]=(s[i]-'A'+k)%26+'A';
else if ('a'<=s[i]&&s[i]<='z') s[i]=(s[i]-'a'+k)%26 +'a';
}
cout<<s<<endl;
}

 

程式碼解析:

string s; int k;:: 宣告一個 string 變數 s 用來存放輸入的字串,一個 int 變數 k 用來存放偏移量。


getline(cin, s);:: 使用 getline 函式讀取一整行字串,並存入變數 s 中,包括空格。


cin >> k;:: 讀取一個整數到變數 k 中,用作凱薩加密的偏移量。


for(int i=0; i<s.size(); i++) { ... }:: 迴圈遍歷字串 s 中的每一個字元。
if ('A' <= s[i] && s[i] <= 'Z') { ... }:: 判斷字元 s[i] 是否為大寫字母。
s[i] = (s[i] - 'A' + k) % 26 + 'A';::
s[i] - 'A':將大寫字母轉換為0-25 的數字。
+ k:加上偏移量 k。
% 26:使用模運算來處理超出'Z' 的情況,例如Z+1 會變成 A。
+ 'A':將偏移後的數字轉換回大寫字母。


else if ('a' <= s[i] && s[i] <= 'z') { ... }:: 判斷字元 s[i] 是否為小寫字母。
s[i] = (s[i] - 'a' + k) % 26 + 'a';::
s[i] - 'a':將小寫字母轉換為0-25 的數字。
+ k:加上偏移量 k。
% 26:使用模運算來處理超出'z' 的情況,例如z+1 會變成 a。


+ 'a':將偏移後的數字轉換回小寫字母。
cout << s << endl;:: 輸出加密後的字串 s,並換行。