【问题标题】:JavaScript, Java, Php, or C++ cipher encryption - reworking algorithmJavaScript、Java、Php 或 C++ 密码加密 - 返工算法
【发布时间】:2014-04-17 14:04:17
【问题描述】:

我正在尝试实现一个循环,将字符串加密为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++,但我会像 C++ 一样接受 JavaScript、Java 或 Php 建议,只要它是没有库资源的原始代码。谢谢大家。

【问题讨论】:

  • @WhozCraig 我不确定你在暗示什么。您可以忽略该语句,即用于测试。
  • 好的。没有暗示什么。建议使用密钥表通常可以使简单的剖宫产密码更容易,因为它可以在内部保存许多计算,但它与您现在发布的内容没有真正的关系,所以我放弃了它。
  • 哦,好吧,但我的代码将 A-z 包装为:line[i] = ((line[i] - 26) + key);,所以不需要。

标签: java javascript php c++ encryption


【解决方案1】:

您可以只升级变量移位,然后而不是检查溢出检查增加检查减少

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 (line[i] >= 'A' && line[i] <= 'Z') {

        int rotate = line[i] + shift;
        if (rotate < 'A') line[i] = ((line[i] + 26) + shift);
        else line[i] = rotate;

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多