【问题标题】:How can I decode an NSString using the A1Z26 cipher? [closed]如何使用 A1Z26 密码解码 NSString? [关闭]
【发布时间】:2018-01-02 20:37:23
【问题描述】:

我正在尝试使用 A1Z26 密码(即 a=1、b=2、...、z=26)对 a 进行解码。输入文本用连字符分隔,如下所示:

-8-16-2-7-8-5-

我有 JavaScript 可以解决这个问题,但我似乎无法获得在 Objective C 中工作的版本

function a1z26Cipher(inputString) {
    var outputString = "";
    var splitString = inputString.split(/(\W| )/);
    for (var i = 0; i < splitString.length; i++) {
        var n = splitString[i];
        if (n >= 1 && n <= 26) outputString += String.fromCharCode(parseInt(n, 10) + 64);
        else outputString += n.replace("-", "");
    }
    return outputString;
}

Objective C 中的等效代码是什么样的?

【问题讨论】:

标签: javascript objective-c cryptography equivalent


【解决方案1】:

在 Objective C 中,这可以如下完成:

-(NSString *)decode:(NSString *)input {
    NSArray<NSString *> *components = [input componentsSeparatedByString:@"-"];
    NSMutableString *output = [[NSMutableString alloc] init];
    for (NSString *component in components) {
        if (component.length == 0) {
            continue;
        }
        char charValue = (char) [component intValue];
        [output appendFormat:@"%c", charValue + ('a' - 1)];
    }
    return [NSString stringWithString:output];
}

请注意,这假定输入已经具有正确的格式。它将愉快地接受"--42-df-w---wf" 形式的字符串。

编辑:如果有多个可能的分隔符(例如连字符和空格),您可以使用NSCharacterSet:

-(NSString *)decode:(NSString *)input {
    NSCharacterSet *separatorSet = [NSCharacterSet characterSetWithCharactersInString: @"- "];
    NSArray<NSString *> *components = [input componentsSeparatedByCharactersInSet:separatorSet];
    ...
}

【讨论】:

  • 对我不起作用
  • 抱歉,修正了一个错误。之前只是转换ASCII。
  • 仍然不起作用你不应该通过分隔字符串 int 值获取 char,你应该将该值添加到 ('a' - 1)
  • 你能解释一下它是怎么不工作的吗?在我的系统上运行它工作正常。如果您查看以下行,则会在其中添加('a' - 1)
  • char charValue = (char) ([component intValue] + ('a' - 1));是修复因为我取 int 值(从 1 到 26),然后将其添加到 a - 1 的值以获取该位置的字符,例如 1 将变为 (1+ ('a' - 1 ))是一个
猜你喜欢
  • 2013-05-14
  • 1970-01-01
  • 2015-09-29
  • 2023-01-12
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 2016-06-12
相关资源
最近更新 更多