题解 | #字符串加密#
字符串加密
http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
#include<ctype.h>
int searchS(int *dp, int maxRoom, char ch) {
for(int i = 0;i < maxRoom; i++) {
if(dp[i] == ch) {
return 1;
}
}
return 0;
}
int searchC(char *s, int count, char ch) {
for(int i = 0; i < count; i++) {
if(s[i] == ch) {
return 1;
}
}
return 0;
}
int main() {
char s1[100] = "";//密匙
char s2[100] = "";//明文
while(~scanf("%s %s", s1,s2)) {
int i = 0;
int j = 0;
int dp[26] = {0};
char ch = ' ';
char s3[100] = "";
int count = 0;
//首先将密匙去重,去重之后得到s3字符串
//思路:用字母的ASCII码值-'A'作为下标(即0表示A,1表示B,3表示C...),
//密匙作为对应数组的值,即dp[26],
//将s3中密匙值直接赋值dp,之后将不在s3的字母按照ASCII码-'A'顺序赋值给dp,
//得到完整的密匙dp[26];
//按照s2字符匹配dp的下标值,得到的就是s2中各个字符的密匙值
for(j = 0; j < strlen(s1); j++) {
for(i = 0; i < 100 && s3[i] != s1[j]; i++) {
;
}
if(i == 100){
s3[count++] = s1[j];
}
}
s3[count] = 0;
count = strlen(s3);
for(i = 0; i < count; i++) {
dp[i] = s3[i];
}
for(ch = 'a'; ch <= 'z'; ch++) {
if(searchS(dp,26,ch) != 1) {
dp[i++] = ch;
}
}
for(i = 0; i < strlen(s2); i++) {
if(s2[i] != ' ') {
ch = islower(s2[i]) ? s2[i] - 'a' + 'A' : s2[i];
s2[i] = dp[ch-'A'];
}
}
printf("%s\n", s2);
}
return 0;
}