[課業] 密碼學作業 包含讀檔、輸出。
#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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):