题解 | #字符串加密#

字符串加密

http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3

#include<iostream>
#include<string>
#include<algorithm>
#include<string.h>
using namespace std;
string jiami(string kss,string str){
    int f[26]={0};
    for(int i=0;i<kss.size();i++){
        kss[i]=tolower(kss[i]);
    }
    string key="";
    for(int i=0;i<kss.size();i++){
        if(f[kss[i]-97]==0){
            key.push_back(kss[i]);
            f[kss[i]-97]=1;
        }
    }
    for(int i='a';i<='z';i++){
        if(f[i-97]==0){
            key.push_back(i);
            f[i-97]=1;
        }
    }
    for(int j=0;j<str.size();j++){
        if(isupper(str[j])){
            str[j]=toupper(key[str[j]-65]);
        }
        else if(islower(str[j])){
            str[j]=key[str[j]-97];
        }
    }
    return str;
}
int main(){
    string s1,s2;
    while(cin>>s1>>s2){
        cout<<jiami(s1,s2)<<endl;
    }
    return 0;
}

思路:

1.为了加快运算用例,将加密封装为一个字符串函数jiami(参数1,参数2),参数1代表key,参数2代表明文,返回值为密文;

2.为加密规则方便,将key中字母都转化为小写字母;

3.定义一个空字符串my来放密钥;

4.定义一个长度为26的数组f[26],用f[i]=1来表示字母char(i+97)已经存放进密钥,f[i]初始化为0表示未加入密钥;

5.遍历key,若f[key[i]]=0,将key[i]加入密钥字符串my中,并令f[key[i]]=1,这样便将key中不同的字符按顺序加入了密钥字符串my中;

6.为防止key中不包含全部字母,再让依次遍历字母a~z,若f[i-97]=0,再将字母i添入密钥字符串my中,这样操作完以后,密钥字符串my中有26个字母,按顺序分别就是从a到z加密后的字母的小写形式;

7.遍历明文,若字符str[j]是大写字母,my[str[j]-65]就是它加密后的小写字母,再用toupper()函数将它转化为大写字母形式, 若str[j]是小写字母,则my[str[j]-97]就是它加密后的字母,将加密结果赋值给原字符;

8.返回str,这时已经对它完成了加密操作;

9.写主函数读入key和明文,判断读入有效的话调用加密函数并输出jiami(key,str);

全部评论

相关推荐

点赞 评论 收藏
分享
05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务