我正在阅读带有一行文本的文件。我正在读取文件并根据用户给出的位移更改字符。虽然它适用于某些角色,但它不适用于超出特定点的其他角色。
我的文件包含以下文本:“这太疯狂了”。当我以 20 的位移运行代码时,我得到的是:▒bc▒ c▒ w▒u▒▒
string Security::EncWordUsingRot(int rotNum, string word)
{
rotNum = rotNum%26;
string encWord = word;
for (int i = 0; i < word.size(); i++)
{
char c = word[i];
c = tolower(c);
if ((c < 'a') || (c > 'z'))
encWord[i] = c;
else
{
c = (c + rotNum);
if (c > 'z')
c = (c - 26);
}
encWord[i] = c;
}
return encWord;
}
*编辑**
我更改了注释部分以纠正我的错误。我改unsigned char c = word[i]
回char c = word[i]
. 我还添加了另外两行代码来处理 c 的值低于“a”。我这样做是因为当我想将加密语句恢复为原始形式时,我注意到了一个问题。
string Security::EncWordUsingRot(int rotNum, string word)
{
rotNum = rotNum%26;
string encWord = word;
for (int i = 0; i < word.size(); i++)
{
char c = word[i]; //removed unsigned
c = tolower(c);
if ((c < 'a') || (c > 'z'))
encWord[i] = c;
else
{
c = (c + rotNum);
if (c > 'z')
c = (c - 26);
if (c < 'a') //but I added this if statement if the value of c is less than 'a'
c = (c + 26);
}
encWord[i] = c;
}
return encWord;
}