#include <stdio.h> #include<string.h> /* 首先,选择一个单词作为密匙, 如果单词中包含有重复的字母,只保留第1个, 将所得结果作为新字母表开头,并将新建立的字母表中未出现的字母按照正常字母表顺序加入新字母表。 */ char flag[26] = {0}; //加密数组(26字母) int flagSize = 0; // //检查target字符是否已存在数组中 int check(char target) { for (int i = 0; i < flagSize; i++) { if (flag[i] == target) return 1; } return 0; } int main() { char str[101] = {0}; //key字符串 char ret[101] = {0}; //要加密的字符串 scanf("%s", str); scanf("%s", ret); int len = strlen(str); int len2 = strlen(ret); //遍历,未出现的字符按顺序放入加密数组,第一次先全部存入加密数组 for (int i = 0; i < len; i++) { if (!check(str[i])) { flag[flagSize++] = str[i]; } } //题目只要小写字母,遍历a-z未出现的字符按顺序放入加密数组的后面 for (char i = 'a'; i <= 'z'; i++) { if (!check(i)) { flag[flagSize++] = i; } } for (int i = 0; i < len2; i++) { printf("%c", flag[ret[i] -'a']); //加密的字母与第一个的长度距离就是加密数组的下标对应 输出 } return 0; }