华为OJ题目(七):字符串加密

来源:互联网 发布:有困难网络求助平台 编辑:程序博客网 时间:2024/05/17 20:33

#include<iostream>#include<cstring>using namespace std;#define M 100int main(){char key[M], data[M], encrypt[M];void Encrypt(char *key, char *data, char *encrypt);gets(key);gets(data);Encrypt(key, data, encrypt);cout << encrypt << endl;return 0;}void Encrypt(char *key, char *data, char *encrypt){char keych[M];keych[0] = key[0];int i, j = 0, k = 0, flag;for (i = 0; key[i] != '\0'; i++)//把去重之后的密钥赋给keych[],{flag = 1;for (k = 0; k<j + 1; k++) //只跟已赋值的前几个值比较,看是否重复(因为若重复只保留第一个),倒序比较{if (key[i] == keych[k])flag = 0;}if (flag){j = j + 1;keych[j] = key[i];}}int len;len = j + 1;//keych的长度char Alph[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";for (i = 0; Alph[i] != '\0'; i++) //keych[]补全,长度为26,值与Alph数组一一对应{flag = 1;for (k = 0; k<len; k++){if (Alph[i] == keych[k])flag = 0;if (Alph[i] == keych[k] - 32){keych[k] = keych[k] - 32; flag = 0;}}if (flag){keych[len] = Alph[i];len = len + 1;}}keych[len] = '\0';i = 0; k = 0;while (data[i] != '\0') //明文转换为密文{if ((data[i] >= 'A'&&data[i] <= 'Z') || (data[i] >= 'a'&&data[i] <= 'z')){for (j = 0; j<26; j++){if ((data[i] == Alph[j]) || (data[i] - 32 == Alph[j])) //判断大小写字母{if (data[i] >= 'A'&&data[i] <= 'Z')encrypt[k] = keych[j];elseencrypt[k] = keych[j] + 32;break;}}}elseencrypt[k] = data[i];i = i + 1; k = k + 1;}encrypt[k] = '\0';}


1 0
原创粉丝点击