c语言中if( key_1),<<c与指针>>第9章中的一路题

C/C++ code#include

#include

using namespace std;

bool FindChar(string &str,int start_index,int end_index,char ch)

{

for (int i=start_index;i<=end_index;i++)

{

if (str[i]==ch)

{

return true;

}

}

return false;

}

bool IsChar(char ch)

{

if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))

{

return true;

}

else

{

return false;

}

}

void PrepareKey(string &key_word,string &code_str)

{

int i,j=0;

for (i=0;i

{

if (!FindChar(code_str,0,code_str.length()-1,key_word[i]))

{

code_str=code_str+key_word[i];

}

}

for (i=0;i<26;i++)

{

if (!FindChar(code_str,0,code_str.length()-1,'A'+i))

{

code_str=code_str+char('A'+i);

}

}

}

void Encrypt(const string &code_str,string &data,string &code)

{

int i;

char temp;

for (i=0;i

{

temp=data[i];

if (IsChar(temp))

{

temp=temp&0x7f;

code=code+code_str[temp-'A'];

}

else

{

code=code+data[i];

}

}

}

int FindePosition(const string &code_str,char ch)

{

for (int i=0;i

{

if (code_str[i]==ch)

{

return i;

}

}

return -1;

}

void Decrypt(const string &code_str,string &code,string &data)

{

int i;

char temp;

for (i=0;i

{

temp=code[i];

if (IsChar(temp))

{

temp=temp&0x7f;

int pos=FindePosition(code_str,temp);

data=data+char('A'+pos);

}

else

{

data=data+code;

}

}

}

int main()

{

string sour_str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

string key_word;//用于生成密钥的单词

cin>>key_word;

string code_str;//产生的密钥序列

PrepareKey(key_word,code_str);//产生密钥序列的函数

string data="ATTACK AT DAWN";//明文

string code;//密文为空

Encrypt(code_str,data,code);//用于加密的操作,密码存储在code中

string new_data;//明文为空

Decrypt(code_str,code,new_data);//将密文code解密得到的明文的函数

return 0;

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值