2012-02-17 1 views
0

메모리를 할당하지 않고 문자열을 역순으로 변환하는 방법에 대한 질문을 받았습니다. 어떤 사람?메모리를 할당하지 않고 문자열을 역순으로 변환하는 방법

+2

확실한 질문은 코코아와 NSString입니까? – Costique

+0

ahhh, 이것은 고전적인 면접 질문입니다.이 질문에 "interview"태그를 추가해야합니다. –

+0

나는 이것에 대한 답을 발견했다. 그리고 그것을 구현할 수 있었다. 아무도 대답이 나오지 않으면 나는 내일 대답을 게시 할 것이다. – vivianaranha

답변

1
void reverseStringBetter(char* str) 
{ 
    int i, j; 
    i=j=0; 

    j=strlen(str)1; 
    for (i=0; i<j; i++, j-) 
    { 
     str[i] ^= str[j] ; 
     str[j] ^= str[i] ; 
     str[i] ^= str[j] ; 
    } 
} 
+0

'j = strlen (str) 1;'에 오타가 있습니까? ?? –

+0

또한 for 루프에서 'j-' –

+0

다른 답변이 주어지면 답이 잘못 나온 것 같지만 어쨌든 받아 들였습니다! NSString과 같은 바이트를 스왑 할 수 있다고해도 작동하지 않습니다. http://www.objc.io/issue-9/unicode.html에 따르면 NSString은 utf-16으로 인코딩되며 인덱스는 코드 포인트 (문자)가 아닌 코드 단위를 나타냅니다. –

4

NSString이 불변이므로 메모리를 할당하거나 할당하지 않고 NSString을 되돌릴 수 없습니다.

메모리를 할당하지 않고 NSMutableString을 되돌릴 수 없습니다. NSMutableString의 내용을 대체하기 위해 제공되는 유일한 방법은 할당해야 할 NSString에 새 문자를 지정해야하기 때문입니다.

CFMutableString도 "문제"가 있습니다.

0

NSString은 변경할 수 없으며 유일한 방법은 새 문자열을 만드는 것이므로 불가능합니다.

이 항목은 찾고자하는 것이 아니지만 NSString을 일반적인 C-string으로 변환하고 해당 위치에서 편집 할 수 있습니다. 여전히 메모리를 할당하고 있지만 문자열을 제 위치에서 수정할 수 있기 때문에 최소한 원하는 것의 절반을 얻을 수 있습니다.

당신의 유스 케이스가 메모리를 할당하고 싶지 않거나 단순히 가설적인 것인지 잘 모르겠습니다.