题解 | #字符串加密# C++解法 3ms通过

字符串加密

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

#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
    string key,ming_s;
    while(cin>>key>>ming_s)
    {
        transform(key.begin(),key.end(),key.begin(),::toupper);//统一转成大写
        vector<char> v;//v用于存加key后的字母表
        for(int i=0;i<key.size();i++)//先将key插入字母表中
        {
            int j;
            for(j=0;j<v.size();j++)
            {
                if (v[j]==key[i]) break;
            }
            if(j==v.size()) v.push_back(key[i]);
        }
        int i;
         for( i=0;i<26;i++)//再插入key以外的字母到字母表中
        {
            int j;
            for(j=0;j<v.size();j++)
            {
                if (v[j]==('A'+i)) break;
            }
            if(j==v.size()) v.push_back('A'+i);
        }
        for(int m=0;m<ming_s.size();m++)//这里开始将明文转成密文
        {
            int lower_flag=0;//字母小写标志,若小写则为1,并统一转成大写方便和字母表对应
            if(ming_s[m]>='a'&&ming_s[m]<='z')
            {
                lower_flag=1;
                ming_s[m]=toupper(ming_s[m]);//统一转成大写方便和字母表对应
            }
            ming_s[m]=v[(ming_s[m]-'A')];//铭文中字母相对‘A’的位置正好是加key字母表中的下标
            if(lower_flag)
            {
                ming_s[m]=tolower(ming_s[m]);//如果是小写,需要转回小写
            }
        }

        for(auto x:ming_s) cout<<x;
        cout<<endl;
    }
}
全部评论

相关推荐

02-13 15:16
三江学院 运营
据说名字越长别人越关注你的昵称我觉得我要被关注了:完全看不出你到底干了什么 全是车轱辘话
点赞 评论 收藏
分享
2024-12-29 19:48
河北科技大学 Java
我真的会练有氧:1.如果没有实习经验,项目一个太少了 2.项目的需求描述不要写成用xxx实现了xxx。写明具体的需求功能就可以,除非是你想特别突出让面试官问的问题 3.证书就一个4级没必要摆上去,摆上去显得你就只有一个4级 4.技术栈太少了,且比较简略,可以加点分布式,常用的微服务组件,架构设计等等信息 个人意见,不喜勿喷
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务