[华为OJ] 字符串加密
来源:互联网 发布:广东麻将app源码 编辑:程序博客网 时间:2024/05/18 09:12
思路:
这道题目最难的地方在题意的理解,尤其是密匙是如何生成的,将拗口的密匙生成过程说明如下,分为两个步骤:
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); }
0 0
- 华为oj 字符串加密
- 华为oj:字符串加密
- 华为oj 字符串加密
- 华为oj,字符串加密
- [华为OJ] 字符串加密
- 【华为OJ】字符串加密
- 【华为 OJ 】字符串加密
- 华为OJ-字符串加密
- 华为OJ:字符串加密
- 华为oj 字符串加密
- 华为OJ上机-字符串加密
- 【华为OJ】【026-字符串加密】
- 华为OJ 初级:字符串加密
- 华为OJ基础篇-字符串加密
- 华为OJ题目(七):字符串加密
- 华为OJ——字符串加密
- 华为OJ——字符串加密
- [华为OJ--C++]026-字符串加密
- [leetcode]345. Reverse Vowels of a String
- pch文件
- Java静态域与静态方法
- Android内核开发:图解Android系统的启动过程
- 数论相关公式
- [华为OJ] 字符串加密
- T3600工作站重做磁盘阵列及安装系统说明文档
- XXTea算法Java版
- [leetcode]344. Reverse String
- JavaScript类数组对象
- 【MyBatis框架】MyBatis入门程序第一部分
- 安卓中的Flux架构
- Turtle随机生成图像
- Android使用intent跳转到其它应用activity界面