Как перевернуть строку без выделения памяти - PullRequest
0 голосов
/ 17 февраля 2012

Мне задали этот вопрос о том, как перевернуть строку без выделения памяти. Любой берущий?

Ответы [ 3 ]

4 голосов
/ 17 февраля 2012

Нельзя изменить NSString с выделением памяти или без нее, поскольку NSString является неизменным.

Нельзя поменять NSMutableString на месте без выделения памяти, поскольку единственные методы, которые NSMutableString предоставляет для замены его содержимого, требуют указания новых символов в NSString, который вам нужно было бы выделить.

CFMutableString имеет ту же «проблему».

1 голос
/ 06 марта 2012
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 голосов
/ 17 февраля 2012

Это невозможно с NSString, поскольку они неизменны, и единственный способ - создать новую строку.

Хотя это может быть не то, что вы ищете, вы можете преобразовать NSStringк нормальной c-строке, и отредактируйте это на месте.Вы по-прежнему выделяете память, но вы, по крайней мере, получите половину того, что вы хотите, если сможете изменить строку на месте.

Я не уверен, каков ваш вариант использования для нежелания выделять память или это просто гипотетически.

...