有一种技巧可以对数据进行加密,它使用一个单词作为它的秘钥。下面是它的工作原理:首先:选择一个单词作为秘钥,如TRAILAZERS。如果单词中包含有重复的字母,只包邮第1个,其余几个丢弃。现在修改过的那个单词位于字母表下面,如下所示:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
在对信息进行加密时,信息中的每个字母用下面那行对应的字母替换——取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个秘钥,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH
#include<iostream>
#include<string>
#include<cctype>
#include<map>
using namespace std;
int main()
{
string s1("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
string s2("TRAILBZESCDFGHJKMNOPQUVWXY");
map<char,char> trans_map;
trans_map[' ']=' ';
for(size_t i=0;i<s1.size();i++)
trans_map[s1[i]]=s2[i];
for(size_t i=0;i<s1.size();i++)
trans_map[tolower(s1[i])]=tolower(s2[i]);
/*
map<char,char>::iterator map_it=trans_map.begin();
for(;map_it!=trans_map.end();++map_it)
cout<<map_it->first<<" "<<map_it->second<<endl;
*/
string txt;
getline(cin,txt);
for(size_t i=0;i<txt.size();i++)
{
map<char,char>::const_iterator it=trans_map.find(txt[i]);
if(it!=trans_map.end())
txt[i]=it->second;
}
cout<<txt<<endl;
}