2017-03-15 75 views
-4

我在做一個解密程序。我一直在尋找並試圖弄清楚這一點,但我什麼也沒看到。所以當我解密如9adwrqxvni0348&4#9它會很好,但是當我有一個11或更多的偏移量時,它會解密除最後一個字符以外的所有字符。無論過去11的偏移量是否最後一個字符都是相同的。我剛纔把所有的字母都加進去了,而且它們都有效。它只是最後一個數字字符,不能通過11當偏移量爲11或更多時,解密凱撒密碼失敗

for (int count = 0; count < length; count++) 
{ 
    if (msg[count] >= 'a' && msg[count] <= 'z')//Letter wraping 
    { 
     dmsg += ((msg[count] - 'a' - offset + 26) % 26) + 'a'; 
    } 
    else if (msg[count] >= '0' && msg[count] <= '9')//Number wraping 
    { 
     dmsg += (abs(msg[count] - '0' - offset + 10) % 10) + '0'; 
    }  
} 
+0

你試過計數<=長度嗎? –

+0

可能是你的問題:http://stackoverflow.com/questions/7594508/modulo-operator-with-negative-values –

+0

如果代碼是10bexrrywoi1459&4#9,那麼它作爲運行家1459進來。這是正確的。如果偏移量是11或更多,那麼它跑出來跑回家1451.不管什麼偏移量在11以上。奇怪 –

回答

-1

它看起來對我,當偏移變得大於10,加入10上比所述偏移和10.一個工作之間的差等於或小於任何數字不創建適當的正值左右是模10的偏移量:

dmsg += (abs(msg[count] - '0' - (offset % 10) + 10) % 10) + '0'; 
+0

是的。工作非常感謝。 –

+0

@JakePurdom - 非常受歡迎。有一點要記住。如果偏移量大於26,則可能會出現與字母相同的情況。 – tinstaafl

+0

@JakePurdom - 如果您找到了答案可以回答您的問題,請記住標記它。謝謝。 – tinstaafl