2017-08-11 92 views
0

我想弄清楚爲什麼我的Ruby解密方法似乎只打破了某些字母表中的字母。Ruby解密方法問題

的方法的目的是把一個輸入字符串(「new_str」)和通過重寫該串中的每個字母其字母表中的前身解密。即「bcd」應返回「abc」...

我可能是錯的,但它似乎工作的字母aj,但然後打破了字母kz ...對於最後一集似乎返回任一無論字母如:「a」,「b」或「z」: eg解密(「klmnopqrstuvwxyz」) 回報:「azazazazazbzbzbz」

的一個現象是,在定義字母變量字符串,索引號成爲起始於字母k(指數10)兩位數...所以也許這就是扔東西在公式中關閉?無論如何,任何幫助/建議表示讚賞!

def decrypt(new_str) 
    alphabet = "abcdefghijklmnopqrstuvwxyz" 
    index = 0 
    while index < new_str.length 
    new_str[index] = alphabet.index(new_str[index]) 
    new_str[index] = alphabet[new_str[index] - 1] 
    index +=1 
    end 
    puts new_str 
end   

回答

0

您的代碼應該是這樣的:

def decrypt(new_str) 
    alphabet = 'abcdefghijklmnopqrstuvwxyz' 
    index = 0 
    while index < new_str.length 
    letter_index = alphabet.index(new_str[index]) 
    new_str[index] = alphabet[letter_index - 1] 
    index += 1 
    end 
    puts new_str 
end 

decrypt('klmnopqrstuvwxyz') #=> jklmnopqrstuvwxy 
decrypt('abcdefghij')  #=> zabcdefghi 
decrypt('noah')    #=> mnzg 

在代碼中,你被一個整數由5日線做new_str[index] = alphabet.index(new_str[index])交換的信件。

PS .:這是您正在實施的凱撒代碼。如果您有興趣使用更多的Ruby方式來實現它,請檢查link here

0

替換密碼很容易用tr完成。

def decrypt(str) 
    alphabet = 'abcdefghijklmnopqrstuvwxyz' 
    replacement = alphabet.split('').rotate(-1).join 
    str.tr(alphabet,replacement) 
end 

decrypt('klmnopqrstuvwxyz') #=> jklmnopqrstuvwxy 
decrypt('abcdefghij')  #=> zabcdefghi 
decrypt('noah')    #=> mnzg