HJ36. 字符串加密
描述
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y (实际需建立小写字母的字母表,此字母表仅为方便演示)
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙, Attack AT DAWN (黎明时攻击)就会被加密为Tpptad TP ITVH。
请实现下述接口,通过指定的密匙和明文得到密文。
数据范围: ,保证输入的字符串中仅包含小写字母
输入描述
先输入key和要加密的字符串
输出描述
返回加密后的字符串
示例1
输入:
nihao ni
输出:
le
C 解法, 执行用时: 1ms, 内存消耗: 272KB, 提交时间: 2020-10-29
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <limits.h> int main() { /* 初始化对照表 */ char sAlphabet[26] = { 0 }; char cBegin = 'A'; for (int i = 0; i < 26; i++) { sAlphabet[i] = cBegin; cBegin++; } char sInWord[100] = { 0 }; char sText[100] = { 0 }; while (scanf("%s%s", sInWord, sText) != EOF) { char sKeyUp[26] = { 0 }; char sKeyDown[26] = { 0 }; char sUpInWorf[100] = { 0 }; /* 输入单词转大写 */ for (int i = 0; i < strlen(sInWord); i++) { if (sInWord[i] >= 'a' && sInWord[i] <= 'z') { sUpInWorf[i] = sInWord[i] - 32; } } /* 单词去重 */ char sOutWord[26] = { 0 }; int iCount = 0; for (int j = 0; j < strlen(sUpInWorf); j++) { if (strchr(sOutWord, sUpInWorf[j]) == NULL) { sOutWord[iCount] = sUpInWorf[j]; iCount++; } } /* 生成单词表 */ sprintf(sKeyUp, "%s", sOutWord); for (int i = 0; i < 26; i++) { if (strchr(sKeyUp, sAlphabet[i]) == NULL) { sKeyUp[iCount] = sAlphabet[i]; iCount++; } } /* 对照生成小写密码表 */ for (int i = 0; i < 26; i++) { sKeyDown[i] = sKeyUp[i] + 32; } /* 转换 */ for (int k = 0; k < strlen(sText); k++) { if (sText[k] >= 'a' && sText[k] <= 'z') { printf("%c", sKeyDown[sText[k] - 'a']); } else if (sText[k] >= 'A' && sText[k] <= 'Z') { printf("%c", sKeyUp[sText[k] - 'A']); } } printf("\n"); } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 356KB, 提交时间: 2021-07-31
#include <stdio.h> int main(void) { char key[1000], *pKey; while(scanf("%s", &key[0]) != EOF) { char alpbat[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char decrypt[26] = {0}; int decrypt_len = 0; short cnt[128] = {0}; pKey = key; char info[1000], *pInfo; scanf("%s", &info[0]); pInfo = info; // printf("%s\n", pKey); // printf("%s\n", pInfo); for(;*pKey;pKey++) { if(*pKey >= 'a' && *pKey <= 'z') { *pKey -= ('a' - 'A'); } if(!cnt[*pKey]) { cnt[*pKey]++; decrypt[decrypt_len++] = *pKey; alpbat[*pKey - 'A'] = 0; } } decrypt[decrypt_len] = '\0'; // printf("%s\n", alpbat); // printf("%s\n", decrypt); for(int i = 0;i < 26;i++) { if(alpbat[i]) { decrypt[decrypt_len++] = alpbat[i]; } } decrypt[decrypt_len] = '\0'; // printf("%s\n", alpbat); // printf("%s\n", decrypt); for(;*pInfo;pInfo++) { if(*pInfo >= 'a' && *pInfo <= 'z') printf("%c", decrypt[*pInfo - 'a'] + 'a' - 'A'); else if(*pInfo >= 'A' && *pInfo <= 'Z') printf("%c", decrypt[*pInfo - 'A']); } printf("\n"); } return 0; }