2
私はShift Cipherを実装しようとしています。つまり、文字列内のすべての文字を量だけシフトします。私が正しく書いたメソッドは最初の文字を置き換えますが、2回目の反復ではRange out of bounds
の例外がスローされます。Shift Cipher Range of Bounds
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;
}