2
시프트 암호를 구현하려고합니다. 즉, 문자열의 모든 문자를 양만큼 이동합니다. 필자가 올바르게 작성한 메서드는 첫 번째 문자를 대체하지만 두 번째 반복에서는 Range out 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;
}