[課業] 密碼學作業 包含讀檔、輸出。

看板NTUE-CS101作者 (愛撒嬌的貓)時間13年前 (2011/03/29 11:47), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
#include<iostream> #include<fstream> #include<stdio.h> using namespace std; char cipher(char key,char original)//轉換函式 參數key,明文字元 { char transfer; int numkey; numkey = key - 97; if(original + numkey <= 122) { transfer = original + numkey; } else { transfer = original - 26 + numkey; } return transfer; } int main() { string source,secret,key; fstream fileInput; ofstream fileOutput;// 建立檔案物件fileInput,fileOutput char input[]=("C:\\Dev-Cpp\\work\\Input.txt"); char output[]=("C:\\Dev-Cpp\\work\\output.txt"); char br=10; //樓上太長了分開宣告 int n,metric=7; fileInput.open(input,ios::in); fileOutput.open(output,ios::app);//建立讀取、輸出檔案C:\Dev-Cpp\work if (fileInput == NULL) //檢測開啟檔案是否失敗 { printf("open file fail!\n"); //如果錯誤列出訊息即離開 exit(0); } cout<<"請輸入加密金鑰\n"; cin>>key; while(!fileInput.eof()) //讀取檔案內資料 一直讀取到檔案結束為止 { fileInput>>source; } fileInput.close(); //關閉開啟的東西是好習慣 key.append(source,key.length(),source.length() - key.length()); //把原版的key改良 //現在不需要兩個陣列 for(n=0;n<source.length();n++) { source[n] = cipher(key[n],source[n]); } for(n=0;n<source.length();n++) //輸出 { if(n % metric == 0 && n != 0) //依照metric 格式輸出 { fileOutput<<br; } //其實我比較喜歡/br fileOutput<<source[n]; } fileOutput<<br; //每筆資料用換行字元隔開 fileOutput.close(); //隨手關燈 return 0; } 打這份的時候其實碰到很多難點,包括檔案的IO、string初始化等問題、eof..... 像是上一份中的string沒辦法直接輸出是因為他本身length為0,主要是因為使 用的並不合法,會有覆蓋到其他資料的疑慮。本來的eof問題到後來我直接用別 的方法= =,老師要求的main參數我沒放上去,大家只要按照格式把幾個參數丟 到main後面即可。 話說....metric那個我有沒有用錯= =其實我一直不知道老師第二個參數在說啥...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.127.0.254 ※ 編輯: lobaka 來自: 120.127.0.254 (03/29 11:50)
文章代碼(AID): #1DaLOrgu (NTUE-CS101)
文章代碼(AID): #1DaLOrgu (NTUE-CS101)