2017-02-02 58 views
-1

剛學習objective-c,我想用一個簡單的for循環來反轉字符串。我不確定我在這裏失去了什麼部分。任何幫助將不勝感激。反向字符串for循環在Objective-C中

NSString *input = @"Hello world"; 

NSMutableString *reversedString = [NSMutableString string]; 

for(int i =0; i<input.length;i--){ 

    [reversedString appendString:input]; 

} 
+0

什麼是您預期的輸出? @「dlrow olleH」? – kevin

+0

這裏有幾個想法:(http://stackoverflow.com/questions/6720191/reverse-nsstring-text),但我不會因爲dup而關閉,因爲我沒有看到任何答案比@Sulthan的「Another方式「,我認爲這是最短的計算行程 – danh

回答

0

那裏有兩個錯誤。

首先,for循環。你必須從最後一個索引開始到零:

for (NSInteger i = input.length - 1; i >= 0; i--) { 

其次,你總是附加整個字符串,而不是字符。

NSString *character = [input substringWithRange:NSMakeRange(i, 1)]; 
[reversedString appendString:character]; 

(我正在採取一個子開始於索引i與長度1)。

另一種方法是:

unichar character = [input characterAtIndex:i]; 
[reversedString appendFormat:@"%C", character]; 

一點點更先進的辦法是:

[input enumerateSubstringsInRange:NSMakeRange(0, input.length) 
          options:(NSStringEnumerationByComposedCharacterSequences | NSStringEnumerationReverse) 
         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
            [reversedString appendString:substring]; 
           }]; 
+0

我喜歡第二個想法。使用'[input UTF8String]'轉換輸入,然後'character = convertedInput [i]' – danh

+0

@danh Nope,可能會更好。如果你的字符串不是ASCII,那麼'UTF8String'是一個糟糕的主意。注意'unichar'和'char之間的區別。 – Sulthan

+0

OP的字符串是ASCII – danh