任何人都可以解释一下如何在凯撒转换代码中发生a-to-z和A-to-Z之间的字符包裹?
void f(char *&p) {...}
K是移位量,c是字符串s的字符。
还有更好的方法吗?
答案 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
之前的字符。