#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char key[101]; char plaintext[101]; // 首先读取数据 scanf("%s", key); scanf("%s", plaintext); // 之后我们开始对key进行去重处理 char appear[26] = {0}; int len = strlen(key); char *newkey = (char *)malloc((len + 1) * sizeof(char)); newkey[0] = '\0'; for(int i = 0; i < len; i++) { // 如果之前没遇到过这个字母 if(appear[key[i] - 'a'] == 0) { // 标记为遇到过了 appear[key[i] - 'a'] = 1; // 加入我们的去重后key(newkey)中 strncat(newkey, &key[i], 1); } } // 去重完成之后,我们需要建立一个密码表 char *cipher = (char *)malloc(26 * sizeof(char)); len = strlen(newkey); strncat(cipher, newkey, len); for(int i = 0 ; i < 26; i++) { if(!appear[i]) { char temp = 'a' + i; strncat(cipher, &temp , 1); } } cipher[26] = '\0'; // 建立完新的密码表我们开始对字符串进行加密 len = strlen(plaintext); char ciphertext[len]; for (int i = 0; i < len; i++) { ciphertext[i] = cipher[plaintext[i] - 'a']; } ciphertext[len] = '\0'; printf("%s\n", ciphertext); return 0; }