Сдвиг диапазона шифра за пределы - PullRequest
2 голосов
/ 29 октября 2011

Я пытаюсь реализовать шифр сдвига, что означает сдвиг каждого символа в строке на величину.Метод, который я написал правильно, заменяет первую букву, но на второй итерации выдает исключение 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;

}

1 Ответ

1 голос
/ 29 октября 2011

NSRange имеет местоположение и длину.В качестве длины вы используете i + 1, поэтому во второй итерации вы запрашиваете символы после конца строки.Ваш диапазон должен быть {i, 1}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...