题解 | #字符串加密#

字符串加密

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;
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务