我尝试编写一个函数来简单地移动字符(向左或向右移动,具体取决于以下函数中的移位参数)。大写字母仍然是大写字母。这是我的方法:
char encodeCaesarCipherChar(char ch, int shift)
{
char result;
if (!isalpha(ch)) return ch;
result = ch + shift;
if (islower(ch) && result < 'a') {
result += int('z') - 1;
result -= int('a');
} else if (islower(ch) && result > 'z') {
result -= int('z');
result += int('a') - 1;
} else if (isupper(ch) && result < 'A') {
result += int('Z') - 1;
result -= int('A');
} else if (isupper(ch) && result > 'Z') {
result -= int('Z');
result += int('A') - 1;
}
return result;
}
当输入字符为&#39;时,此功能停止正常工作。超越。有人可以指出我的方法有什么问题吗?
提前致谢。
答案 0 :(得分:6)
's'+ 13将溢出已签名的char
。在调整数字之后和返回之前,将结果保存在int
并投射到char
。