【问题标题】:Shift Cipher Range out of Bounds将密码范围移出边界
【发布时间】:2011-10-29 17:39:02
【问题描述】:

我正在尝试实现移位密码,这意味着将字符串中的每个字符移位一个量。我写的方法正确替换了第一个字母,但是在第二次迭代时它抛出了一个Range out of bounds 异常。

original = @"rt" 第一次将r 替换为wt 不会被 y 第二次替换。

shift = 5

#define LETTER_POS 97
#define ALPHABET_LENGTH 26

- (NSString*)encode:(NSString*)original withShift:(int)shift {

    NSMutableString* encoded = [NSMutableString stringWithString:original];
    for (int i=0; i < [encoded length]; i++) {
        char oriChar = [encoded characterAtIndex:i];
        if (oriChar == ' ') {
            continue;
        }
        char encChar = ((oriChar - LETTER_POS) + shift) % ALPHABET_LENGTH + LETTER_POS;
        NSRange range = {i, i+1};
        [encoded replaceCharactersInRange:range withString:[NSString stringWithFormat:@"%c" , encChar]];

    }
    return encoded;

}

【问题讨论】:

    标签: objective-c string cocoa nsstring


    【解决方案1】:

    NSRange 有一个位置和一个长度。您使用 i+1 作为长度,因此在第二次迭代中,您要求输入字符串末尾之后的字符。你的范围应该是 {i, 1}。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 2022-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多