2014-05-24 3 views
1

문자열을 뒤집기 위해이 코드를 작성 중이며 NSRange의 매개 변수가 작동하지 않는 이유가 필요합니다.NSA 범위가 잘못되었습니다.

CODE : 모든 코드의

for (int i = 0; i <= oldString.length; i++) { 
    NSRange range = NSMakeRange(i, oldString.length); 
} 

답변

0

먼저 작동하는 경우도, 아무것도하지 않는, 충분하지 않습니다.

또한 NSRangelocationlength의 두 매개 변수를 사용하므로 앱이 다운됩니다. location는> 0이고, 길이로 설정하면 oldString.length 그래서 location까지, 그렇지 않으면 0이 lengtholdString.length (즉 모든 문자열)이 될 수있다, 그 경계 벗어나.

를 사용하여 내가 제대로 NSMakeRange뿐만 아니라이 기능을 사용 :

- (NSString *)reverseString:(NSString *)string { 

    NSMutableString *newString = [NSMutableString new]; 

    for (int i = (int)[string length]-1; i >= 0; i--) { 
     [newString appendString:[string substringWithRange:NSMakeRange(i, 1)]]; 
    } 

    return [newString copy]; 
} 
+0

OP의 질문에 완전히 답하지 않았습니다. 당신은 당신의 대답을 확장하여 NSMakeRange가 왜 작동 하는지를 설명 할 수 있습니다. –

+0

나는 걱정하지 않고있다. –

0

귀하의 코드는 이것이다 : 마테오가 당신에게 것처럼

for (int i = 0; i <= oldString.length; i++) { 
    NSRange range = NSMakeRange(i, oldString.length); 
} 

지금 우선, 그것은 아무런 영향을 미치지 않습니다. 그것이하는 일은 범위를 사용하지 않고 범위를 만드는 것입니다.

하지만 그 범위를 살펴 보겠습니다. 연속적인 값 range 만 고려하십시오. 자신의 코드를 연구하십시오. 우리의 문자열 oldString12345이라고 가정합니다. 그 다음 길이는 5입니다. 그런 다음 범위는 연속적으로이 문자열을 덮습니다.

12345 
2345[and one too far] 
345[and two too far] 
45[and three too far] 
5[and four too far] 

이들은 매우 어리석은 범위입니다!

관련 문제