我正在尝试在其中保留空格的地方写Vigenere密码。因此,如果给我一个简单的消息,如“你好,你好吗”,则密码的格式为“ abcde fgh ijk lmn”,我所要保留的是空格。我已经为此工作了一段时间。任何帮助,将不胜感激。
这是我的代码
void CipherText(char* plainText, char* cipherKey)
{
int keyLength = strlen(cipherKey);
char cipherText;
for(int i = 0; i < strlen(plainText); i++)
{
int cipherText = (unsigned char)plainText[i];
cipherText = ((int)plainText[i]-97+(int)tolower(cipherKey[i])-97)%26 + 'A';
putchar(cipherText);
}
putchar('\n');
}
[在尝试转换(编码)字符之前,先测试该字符是否为字母。另外,请勿在字符代码中使用数字-例如,使用'a'
而不是97
。我删除了一些不必要的强制转换。我还使用了cipherText
而不是(int)plainText[i]
,因为这样可以避免不必要的符号扩展。我还添加了一些空格;明智地使用空格时,更容易阅读代码。
void CipherText(char* plainText, char* cipherKey)
{
int keyLength = strlen(cipherKey);
char cipherText;
for(int i = 0; i < strlen(plainText); i++)
{
int cipherText = (unsigned char)plainText[i];
if (isalpha(cipherText))
cipherText = (cipherText - 'a' + tolower(cipherKey[i]) - 'a') % 26 + 'A';
putchar(cipherText);
}
putchar('\n');
}