我正在参加Edx的在线课程cs50,我有一项任务,我必须创建一个程序,用户输入一个关键字(用于加密)和一个需要在{{3}加密的字符串密码。
Vigenere通过加密关键字后面的文本来工作:例如,如果我的字符串是" Hello"我的关键字是" abc" :a
按字母字符等于0,b
为1,c
为2;所以字符串中的字母h
被加密而没有切换字符(关键字中的字母a
= 0),字母e
被切换一个位置并加密到{{ 1}},等等。如果关键字的长度小于字符串的长度(如本例所示),则加密必须再次使用关键字的第一个字符,这是我的问题。
事实上,我认为我已经很好地实现了整个程序,但我不确定如果关键字的字符数少于输入的字符串,我不知道如何考虑。 程序现在只返回我的字符串加密的第一个字符,第一个字符未加密,然后停止 我不要求提供完整的解决方案,但我只是想了解如何解决我的程序问题。
这是我的计划:
f
答案 0 :(得分:0)
...如果关键字的字符数少于输入的字符数,则不确定如何考虑。
在keyword[j]
之后访问keyword[]
是不好的。 (未定义的行为)。当密钥短于消息的alpha部分时,OP的代码会发生这种情况。
根据需要,只需重复使用keyword[]
字符串即可。提示:重置j
。
鼠标悬停接听。
int j_length = strlen(keyword);
...
J ++;
if(j> = j_length)j = 0;