作者lobaka (爱撒娇的猫)
看板NTUE-CS101
标题[课业] 密码学作业 包含读档、输出。
时间Tue Mar 29 11:46:59 2011
#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)