2015-05-01 103 views
-2

编码密钥是"qwertyuiopasdfghjklzxcvbnm"这是您在程序中输入"abcdefghijklmnopqrstuvwxyz"时得到的代码。我如何制作一个解码密钥。这是一个替代密码。如果你有建议,请保持简单并利用你所拥有的变量。没有复杂或任何库功能如何从编码密钥(替换密码)制作解码密钥C

char * decodeSubstitution(char * lcEncodingKey, char * src, char * dest) 
{ 
    char  lcDecodingKey[26]; 
    char  ucDecodingKey[26]; 





    char* deststart=dest; 


    int i ; 


    int offset1; 
    int offset2; 

    // Create the lower case decoding key from the lower case encoding key 
    // (WRITE CODE HERE) 
    for (i=0; i<26 ; i++){ 
    // lcDecodingKey[i]=lcEncodingKey[i]; 
      lcDecodingKey[i]= 

     ucDecodingKey[i]= toupper(lcDecodingKey[i]); 
    } 


    // Create the uppercase decoding 
    // (WRITE CODE HERE) 


    // Implementation of the generalized substitution decoder. 
    // (WRITE CODE HERE) 
    for (; *src; ++src, ++dest) 
    { 
     if (isupper(*src)) 
     { 
      offset2=*src-'A'; 
      *dest=ucDecodingKey[offset2]; 

     } 



     else if (islower(*src)){ 
       offset1 = *src - 'a'; 

     *dest = lcDecodingKey[offset1]; 
     } else{ 

      *dest=*src; 
     } 
    } 
     *dest = '\0'; 

     return deststart; 


} 

那是解码的功能。

+0

请,发布您的代码时多加小心。没有什么尖叫“帮助,我无法做我的作业,并在今天的截止日期”就像代码中的'(代码在这里写入代码)'。 –

回答

0

当你编码,您的替代是在编码一个简单的查找键enc

cipher = enc[plain] 

其中cipherplain是指数f起a(0)到z小写字母(25) 。当你进行解码,这是另一种方式圆了解密密钥,dec

plain = dec[cipher] 
     = dec[enc[plain]] 

当然,dec[enc[plain]]必须映射到自己,你可以从编码密码创建解码密码,像这样:

for (int i = 0; i < 26; i++) { 
    dec[enc[i]] = i; 
} 

这应该给你

enc: qwertyuiopasdfghjklzxcvbnm 
dec: kxvmcnophqrszyijadlegwbuft 

您的例子:如果你编码c(指数2),这将成为一个e。如果您解码(或使用解码密钥进行编码),e(索引4)将再次变为c

(当然,你仍然必须映射ASCII字符自然指数0到25,我会离开汤姆你。)

+0

我不完全明白这一点。你为什么要像整数一样对待字符?你能解释你做了什么吗?特别是带有for循环的部分。 –

+0

呃,我以为你已经有一个例程来编码你的字符串了,不是吗?你已经使用了“islower”和偏移量计算。在C中,'char'是一个小整数。如果你不知道,你应该回去研究你的基础知识。 –