Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的字符移位+;_C++_Character - Fatal编程技术网

C++ C+中的字符移位+;

C++ C+中的字符移位+;,c++,character,C++,Character,我试图编写一个函数来进行简单的字符移位(向左或向右,具体取决于下面函数中的移位参数)。大写字母仍然是大写字母。我的做法如下: char encodeCaesarCipherChar(char ch, int shift) { char result; if (!isalpha(ch)) return ch; result = ch + shift; if (islower(ch) && result < 'a') { re

我试图编写一个函数来进行简单的字符移位(向左或向右,具体取决于下面函数中的移位参数)。大写字母仍然是大写字母。我的做法如下:

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;
}
char-encode-cipherchar(char-ch,int-shift)
{
字符结果;
如果(!isalpha(ch))返回ch;
结果=ch+移位;
如果(岛下(ch)和结果<'a'){
结果+=int('z')-1;
结果-=int('a');
}否则如果(岛下(ch)和结果>z'){
结果-=int('z');
结果+=int('a')-1;
}否则如果(isupper(ch)和结果<'A'){
结果+=int('Z')-1;
结果-=int('A');
}否则如果(isupper(ch)和&result>Z'){
结果-=int('Z');
结果+=int('A')-1;
}
返回结果;
}
当输入字符为“s”及以上时,此函数将停止正常工作。有人能指出我的方法有什么问题吗


提前感谢。

's'+13将溢出已签名的
字符。将结果保留在
int
中,并在调整数字后返回之前转换为
char

您为测试提供的
shift
的值是多少?
int('z')-1
不需要将字符文字转换为整数类型,因为
char
是整数类型(不是
int
,而是一个整数)。它至少在某些值上像charm一样工作。您能提供调用代码吗?关于timrau,我使用了13作为移位参数。使用
无符号字符
而不是char