在C++中移动字符

Roy*_*Roy 6 c++ character

我试着编写一个函数来进行简单的字符移位(向左或向右移动,具体取决于以下函数中的移位参数).大写字母仍然是大写字母.这是我的方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

当输入字符为's'时,此功能将停止正常工作.有人可以指出我的方法有什么问题吗?

提前致谢.

svk*_*svk 6

's'+ 13将溢出签名char.在调整数字之后和返回之前,将结果保存在int并投射到char.