作者lobaka (爱撒娇的猫)
看板NTUE-CS101
标题[课业] 密码学作业
时间Mon Mar 28 15:47:47 2011
#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
1F:推 StranGhost:有演算法就很不错了 XD 03/28 17:44
※ 编辑: lobaka 来自: 120.127.0.254 (03/28 17:47)
2F:推 brightevil:教学文!! 03/28 23:45
3F:推 jerry771210:为啥你不直接回传string? C++有支援阿 03/29 10:30
4F:推 jerry771210:我刚跑了一下你的有问题耶.... 03/29 10:33
5F:推 jerry771210:是因为key的长度吗?? 03/29 11:16
6F:→ lobaka:因为string用法不合法,那不是正确的用法。 03/29 23:08
7F:→ game0416:...啥 03/30 01:46
8F:→ lobaka:输出用的string并未初始化,连阵列长度都没有,後面的使用 03/30 11:09
9F:→ lobaka:有可能会覆盖到记忆体上原有的东西。 03/30 11:09