我正在为CS50x制作一个加密程序,我遇到了一个小问题。我试图使用vigenere密码(使用单词作为密钥的密码)来加密一些文本。我遇到的问题是,每当我有空格或非字母字符时,我就会不断递增。根据规范,它不应该...因此,一些角色正在使用错误的密钥......任何想法我怎么能解决这个问题?
以下是我的一小部分代码,可帮助您了解问题。
for(int x=0, i = 0 , textlen = strlen(text); x < textlen; x++ , i++ )
if (isalpha(text[x]))
{
if (islower(keyword[i % num_letters]))
{
if (islower(text[x]) && ((text[x] + (keyword[i % num_letters]) - 'a') <= 'z'))
{
text[x]= (text[x] + (keyword[i % num_letters]) - 'a' );
}
else if (islower(text[x]) && ((text[x] + (keyword[i % num_letters]) - 'a') > 'z' ))
{
text[x]= ('a'+ ((((text[x]) - 'a') + ((keyword[i % num_letters]) - 'a' )) % 26));
}
}
printf("%c", text[x]);
}
else
// Print the non-alpha char as they are
{
printf("%c", text[x]);
}
我希望这段代码可以帮助您理解。这只是代码中的一个片段,但它应该足以理解问题,并可能建议一个解决方案。
谢谢!
答案 0 :(得分:0)
这可能是解决它的一种奇怪的方法,但我认为一个简单的解决方案是,在你的else语句中,减少你的i值。问题在于,无论您是否输入if / else语句,两者都将完成并返回顶部,您将增加它,就像没有任何更改一样。一个更易读的解决方案是将你的i变量控制远离for循环本身,并且只在你打印char之前/之后递增i