2011-10-29 46 views
2

我想實現一個移位密碼,這意味着,移動字符串中的每個字符的數量。我寫的方法正確地替換了第一個字母,但在第二次迭代時拋出了一個Range out of bounds異常。移位密碼範圍出界

original = @"rt"第一次用w代替rt不會被第二次替換爲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; 

} 

回答

1

NSRange具有位置和長度。你使用i + 1作爲長度,所以在你的第二次迭代中,你要求字符超過字符串的末尾。你的範圍應該是{i,1}。