Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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_Ascii - Fatal编程技术网

C++ 凯撒密码编码中的包装字符

C++ 凯撒密码编码中的包装字符,c++,c,ascii,C++,C,Ascii,有谁能解释一下,在凯撒移位码中,a-to-z和a-to-z之间的字符包装是如何发生的 k %= 26; for(int i = 0; i < n; i++){ int c = s[i]; if(c >= 'a' && c <= 'z'){ c += k; if( c > 'z'){ c = 96 + (c % 122); // wrapping from z to a?

有谁能解释一下,在凯撒移位码中,a-to-z和a-to-z之间的字符包装是如何发生的

k %= 26;

for(int i = 0; i < n; i++){
    int c = s[i];
    if(c >= 'a' && c <= 'z'){
        c += k;
        if( c > 'z'){
            c = 96 + (c % 122); // wrapping from z to a?
        }
    }
    else if(c >= 'A' && c <= 'Z'){
        c += k;
        if(c > 'Z'){
            c = 64 + (c % 90);
        }
    }
    cout << (char)c;
}
K是移位量,c是字符串s的字符


有没有更好的方法可以做到这一点呢?

让我们对代码做一些修改,这样就更容易看到发生了什么

for(int i = 0; i < n; i++){
    int c = s[i];
    if(c >= 'a' && c <= 'z'){
        c += k;
        if( c > 'z'){
            c = 'a' + (c % 'z') - 1; // wrapping from z to a?
        }
    }
    else if(c >= 'A' && c <= 'Z'){
        c += k;
        if(c > 'Z'){
            c = 'A' + (c % 'Z') - 1;
        }
    }
    cout << (char)c;
}

所以在c='a'+c%'z'-1;如果c大于z,那么我们用z122对c进行mod,以从a中得到需要的字符数。大写字母也是如此。我在这里减去一,因为我们从a开始,而不是像原始代码一样从a之前的字符开始。

简单的谷歌搜索,这对您有所帮助。为什么在搜索之前询问?如果k<0,代码会有其他问题。建议k%=26;如果k<0,k+=26;这将与kNote有关:c='a'+c%'z'-1只执行c-='z'-a'+1或c-=26。在国际海事组织,这两个问题中的一个会更清楚。