我是靠谱客的博主 仁爱火车,这篇文章主要介绍[华为OJ] 字符串加密,现在分享给大家,希望可以做个参考。

思路:

这道题目最难的地方在题意的理解,尤其是密匙是如何生成的,将拗口的密匙生成过程说明如下,分为两个步骤:

1.对密匙进行去重;

2.对密匙根据字母表剩余字母进行补齐,保证最后的密匙一定是26个字母。


代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#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]内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部