概述
思路:
这道题目最难的地方在题意的理解,尤其是密匙是如何生成的,将拗口的密匙生成过程说明如下,分为两个步骤:
1.对密匙进行去重;
2.对密匙根据字母表剩余字母进行补齐,保证最后的密匙一定是26个字母。
代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void encrypt(string key,string data,string result){
int size = key.size();
if(size == 0) cout << data;
vector<bool> flag(26,false);
//计算真正的密匙realKey
string realKey = "";
for(int i = 0; i < size; i++){//标记key中的重复字母,生成前部分的realKey
int index = 0;
if(key[i] >= 'a' && key[i] <= 'z')
index = key[i] - 'a';
else if(key[i] >= 'A' && key[i] <= 'Z')
index = key[i] - 'A';
else
cout << "error input";
if(!flag[index]){
flag[index] = true;
realKey += index + 'a';
}
}
for(int j =0; j < 26; j++){
if(!flag[j])
realKey += j + 'a';
}
//计算结果
int length = data.size();
if(length == 0) cout << "";
for(int i = 0; i < length; i++){
int index = 0;
if(data[i] >= 'a' && data[i] <= 'z'){
index = data[i] - 'a';
result += realKey[index];
}
else if(data[i] >= 'A' && data[i] <= 'Z'){
index = data[i] - 'A';
result += realKey[index] - 'a' + 'A';
}
else if(data[i] == ' '){
result += " ";
continue;
}
else
cout << "error input";
}
cout << result;
}
void main(){
string key,data;
string result = "";
cin >> key;
cin >> data;
encrypt(key,data,result);
}
最后
以上就是仁爱火车为你收集整理的[华为OJ] 字符串加密的全部内容,希望文章能够帮你解决[华为OJ] 字符串加密所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复