我正在通过在线课程教我如何编码。我对此很陌生,并且一直在慢慢地完成这门课。我遇到了 vingenere 密码的问题。它不会在整个输入中迭代密钥。
编辑:键应该遍历用户输入,当它到达键的末尾时,循环回来并重新开始。该键还应跳过任何特殊字符(!@#“”等)
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main (int argc, string argv[])
{
if(argc !=2)
{
printf("please put in command line argument: example - ./vigenere command\n");
return 1;
}
string key = argv[1];
int keylength = strlen(key);
for (int i=0;i<keylength; i++)
{
if(!isalpha(key[i]))
{
printf("please make sure command is letter only. Please no numbers or special characters!\n");
return 1;
}
}
string input = GetString();
for (int i=0, k=0; i<keylength; i++)
{
if(isalpha(input[i]))
{
if(isupper(input[i]))
{
input[i]=((input[i]-'A')+(key[k%keylength]))%26+'A';
}
else
{
if(islower(input[i]))
{
input[i]=((input[i]-'a')+(key[k%keylength]))%26+'a';
}
}
}
}
printf("%s\n",input);
return 0;
}
我知道字符串不正常,但它包含在标题中以帮助新生。我想随着课程的进展我们会学到更多。