2015-05-01 132 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'是一個小整數。如果你不知道,你應該回去研究你的基礎知識。 –