我正在尝试实现一个移位密码,这意味着将字符串中的每个字符移动一定的量。我正确编写的方法替换了第一个字母,但在第二次迭代时它抛出了 Range out ofbounds
异常。
original = @"rt"
第一次将 r
替换为 w
。 t
第二次不会被 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/