我正在尝试为我本周的问题集制作一个 Vigenère 加密代码,我几乎完成了。我有一个小问题,我不能只在字母字符上使关键字 char 移位这是我的代码,我无法跟踪问题。
GetString() 由库(类似于 scanf)和字符串 typedef 实现
int main(int argc, string argv[])
{
string keyWord;
if( argc != 2 )
{
printf("Wrong Argument");
return 1;
}
else
{
keyWord = argv[1];
//check if argument is
//only alphabetical characters
for(int i = 0; i < strlen(keyWord); i++)
{
char c = keyWord[i];
if( !isalpha(c) )
{
printf("Your Keyword Must Contain Only alphabetical characters\n");
return 1;
}
}
}
string plainText = GetString();
for(int i = 0,j = 0; i < strlen(plainText); i++,j++)
{
if(j >= strlen(keyWord))
j = 0;
char c = plainText[i];
int keyWordWrapper;
char keyC;
if(isalpha(c))
{
keyWordWrapper = j % strlen(keyWord);
keyC = keyWord[keyWordWrapper];
int key;
tolower(c);
if(islower(keyC))
key = keyC - 'a';
if(isupper(keyC))
key = keyC - 'A';
c = (c - 'a' + key) % 26 + 'a';
}
printf("%c",c);
}
printf("\n");
return 0;
}