华为机试——字符串加密

有一种技巧可以对数据进行加密,它使用一个单词作为它的秘钥。下面是它的工作原理:首先:选择一个单词作为秘钥,如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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值