我正试图实现一个循环,将字符串加密到给定的int shift
的移位量。下面的代码工作得很好,但是我想更改代码,以便它以降序而不是升序加密。你知道算法要改什么吗?
int shift = 3;
string line = "abc";
for (int i = 0; i < line.length(); i++) {
if (line[i] >= 'a' && line[i] <= 'z') {
int rotate = line[i] + shift;
if (rotate > 'z') line[i] = ((line[i] - 26) + shift);
else line[i] = rotate;
}
}
cout << line << endl;
通过3的移位,上述代码将string line
"abc"转换为"def",但我试图获得"dcb"的输出。
- 注意:代码是在c++中,但我会接受JavaScript, Java,或Php的建议,就像c++一样,只要它的原始代码没有库资源。谢谢大家。
你可以升级shift变量然后不再检查溢出或递增检查递减
int shift = -3;
string line = "abc";
for (int i = 0; i < line.length(); i++) {
if (line[i] >= 'a' && line[i] <= 'z') {
int rotate = line[i] + shift;
if (rotate < 'a') line[i] = ((line[i] + 26) + shift);
else line[i] = rotate;
}
}
cout << line << endl;
如果你想处理大写
,你也可以在循环中执行下面的if操作if (line[i] >= 'A' && line[i] <= 'Z') {
int rotate = line[i] + shift;
if (rotate < 'A') line[i] = ((line[i] + 26) + shift);
else line[i] = rotate;
}