objective-c - 将密码范围移出界限

标签 objective-c string cocoa nsstring

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

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;

}

最佳答案

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

关于objective-c - 将密码范围移出界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940562/

相关文章:

iphone - 监控并检测 iphone 是否已插入并正在充电,应用程序处于挂起模式时是否已连接 wifi

ios - 在 ScrollView : touchesBegan is received, 上拖动 View 但没有 touchesEnded 或 touchesCancelled

c# - WPF DynamicDataDisplay - 在 Y 轴上放置字符串而不是数字

java - 字符串表示形式的二进制数据到 PDF 文件

.net - 学习应用程序编程的最佳资源? (.Net/ cocoa /等)

objective-c - 如何在十进制和整数之间拆分 NSDecimalnumber 并返回

c++ - 为什么我不能在 Objective-C++ block 中使用 boost::function?

ios - 检测媒体库 ios 权限

java - 搜索字符串并获取第二个匹配项

cocoa - 更改默认帮助键行为