[华为OJ] 字符串加密

思路:

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

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);
    
    
}



发布了29 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u014730658/article/details/51869351