在caesar密码编码中包含字符

时间:2015-07-22 17:48:22

标签: c++ c ascii

任何人都可以解释一下如何在凯撒转换代码中发生a-to-z和A-to-Z之间的字符包裹?

void f(char *&p) {...}

K是移位量,c是字符串s的字符。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

让我们对代码进行一些更改,更容易看到发生了什么

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那么我们通过c修改z(122)来获取{{1}中的字符数我们需要去。大写字母也是如此。我在这里减去一个,因为我们从a开始,而不是像原始代码那样a之前的字符。