看板 NTUE-CS101 關於我們 聯絡資訊
#include<iostream> #include<fstream> using namespace std; char cipher(char key,char original)//轉換函式 參數key,明文字元 { char transfer; //輸出用 int numkey; //暫存由ASCII轉換後的數字 numkey = key - 97; //小寫a的ASCII碼是97 if(original + numkey < 122) //這邊很重要!!由於ASCII碼只定義到127 { //若是超過的不會被當作ASCII處理的樣子 //確切原因博元不知道 //不過大家可以試試看先把他加到超過127 //在減回來,應該是轉不回來 transfer = original + numkey;//密文=原文+key的ASCII碼-97 //不懂為啥的去翻課本 } else { transfer = original - 26 + numkey; //如果加到超過z則-26回頭 } return transfer; //回傳密文 } int main() { string source,secret,key; //定義來源,密文,金鑰 int counter,n; //counter用在剛開始輸入的key,n用在迴圈 cout<<"請輸入明文\n"; cin>>source; //輸入明文 cout<<"請輸入金鑰\n"; cin>>key; //輸入金鑰 counter = 0; for(n=0;n<source.length();n++) { if(counter<key.length()) //分開處理第一個輸入的金鑰 { secret[n] = cipher(key[counter],source[n]); counter++; } else //之後用autokey處理 { secret[n] = cipher(source[n]- counter,source[n]); } } n=0; cout<<"輸出密文\n"; while(true) { if(secret[n] == NULL) //輸出 { break; } cout<<secret[n]; n++; } system("pause"); return 0; } 意外發現,程式都不會寫了!弄個簡單的東西都弄不出來。其實我覺得是308風水不好= = 在實驗室就可以打出來。囧~~~ 輸出的部分不知道為啥直接cout出不去,要用迴圈丟......讀入檔案跟輸出檔案還沒寫 晚點再弄。上面的程式碼肯定很爛,我只有用直覺下去寫,大家應該有很多地方可以改 可以用得更精簡。以上~~博元只有想法= = 博元語法不強。ㄆㄆ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.127.0.254
StranGhost:有演算法就很不錯了 XD 03/28 17:44
※ 編輯: lobaka 來自: 120.127.0.254 (03/28 17:47)
brightevil:教學文!! 03/28 23:45
jerry771210:為啥你不直接回傳string? C++有支援阿 03/29 10:30
jerry771210:我剛跑了一下你的有問題耶.... 03/29 10:33
jerry771210:是因為key的長度嗎?? 03/29 11:16
lobaka:因為string用法不合法,那不是正確的用法。 03/29 23:08
game0416:...啥 03/30 01:46
lobaka:輸出用的string並未初始化,連陣列長度都沒有,後面的使用 03/30 11:09
lobaka:有可能會覆蓋到記憶體上原有的東西。 03/30 11:09