메모리를 할당하지 않고 문자열을 역순으로 변환하는 방법에 대한 질문을 받았습니다. 어떤 사람?메모리를 할당하지 않고 문자열을 역순으로 변환하는 방법
답변
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] ;
}
}
'j = strlen (str) 1;'에 오타가 있습니까? ?? –
또한 for 루프에서 'j-' –
다른 답변이 주어지면 답이 잘못 나온 것 같지만 어쨌든 받아 들였습니다! NSString과 같은 바이트를 스왑 할 수 있다고해도 작동하지 않습니다. http://www.objc.io/issue-9/unicode.html에 따르면 NSString은 utf-16으로 인코딩되며 인덱스는 코드 포인트 (문자)가 아닌 코드 단위를 나타냅니다. –
NSString
이 불변이므로 메모리를 할당하거나 할당하지 않고 NSString
을 되돌릴 수 없습니다.
메모리를 할당하지 않고 NSMutableString
을 되돌릴 수 없습니다. NSMutableString
의 내용을 대체하기 위해 제공되는 유일한 방법은 할당해야 할 NSString
에 새 문자를 지정해야하기 때문입니다.
CFMutableString
도 "문제"가 있습니다.
NSString
은 변경할 수 없으며 유일한 방법은 새 문자열을 만드는 것이므로 불가능합니다.
이 항목은 찾고자하는 것이 아니지만 NSString
을 일반적인 C-string으로 변환하고 해당 위치에서 편집 할 수 있습니다. 여전히 메모리를 할당하고 있지만 문자열을 제 위치에서 수정할 수 있기 때문에 최소한 원하는 것의 절반을 얻을 수 있습니다.
당신의 유스 케이스가 메모리를 할당하고 싶지 않거나 단순히 가설적인 것인지 잘 모르겠습니다.
확실한 질문은 코코아와 NSString입니까? – Costique
ahhh, 이것은 고전적인 면접 질문입니다.이 질문에 "interview"태그를 추가해야합니다. –
나는 이것에 대한 답을 발견했다. 그리고 그것을 구현할 수 있었다. 아무도 대답이 나오지 않으면 나는 내일 대답을 게시 할 것이다. – vivianaranha