2017-03-15 27 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