2012-02-17 8 views
0

メモリを割り当てずに文字列を逆にする方法についてこの質問がありました。何かお手数ですか?メモリを割り当てずに文字列を逆にする方法

+2

質問はCocoaとNSStringと関連していますか? – Costique

+0

ああ、これは古典的な求人インタビューの質問です(そして、あなたはおそらくこれに "インタビュー"タグを追加するべきです)。 –

+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は、その内容を置き換えるために提供する唯一の方法は、あなたが割り当てなければならないだろうNSString、で指定される新しい文字を必要とするので、あなたは、メモリを割り当てない場所でNSMutableStringを元に戻すことはできません。

CFMutableStringにも同じ「問題」があります。

0

NSStringでは不可能であり、唯一の方法は新しい文字列を作成するためではありません。

これはあなたが探しているものではないかもしれませんが、NSStringを通常のC文字列に変換し、その場で編集することができます。あなたはまだメモリを割り当てていますが、文字列を修正することで、必要なものの半分以上を得ることができます。

私はあなたのユースケースがメモリを割り当てたくないかどうか、またはこれが単に仮説的なものかどうかは分かりません。

関連する問題