反转Objective-C中的String数组

时间:2015-04-15 20:37:40

标签: ios objective-c

我想在Objective-C中反转一个字符串数组。

我知道有一种内置方法,如下所示:

NSArray* reversedArray = [[inputString reverseObjectEnumerator] allObjects];

但我希望通过以下编码实现相同的功能,并收到以下错误。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {

    NSMutableArray *inputString = [NSMutableArray arrayWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", nil];

        int lenArray= (int)[inputString count];

        NSMutableArray *reverseString=[[NSMutableArray alloc]initWithCapacity:lenArray];

        for(int i=lenArray-1;i>0;i--)
        {
            [reverseString insertObject:inputString[i] atIndex:i];
        }
      return 0;
    }
  }
  

由于未捕获的异常'NSRangeException'而终止应用程序,原因:   ' - [__ NSArrayM insertObject:atIndex:]:索引8超出空的边界   阵'

3 个答案:

答案 0 :(得分:4)

[reverseString insertObject:inputString[i] atIndex:i];是问题 - 特别是atIndex:i部分。您已经创建了具有足够大容量的可变数组,但它仍然是空的,因此在此处指定索引并不是您想要做的。

相反,只需使用addObject:[reverseString addObject:inputString[i]];

答案 1 :(得分:3)

试试这个:

for (int i = lenArray-1; i >= 0; i--) {
    [reverseString addObject:inputString[i]];
}

注意:只需使用addObject:并将您的for循环条件更改为i >= 0,否则将丢失“a”。

享受!

答案 2 :(得分:0)

以下是完整的解决方案:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSMutableArray *inputString = [NSMutableArray arrayWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", nil];
      //  NSArray* reversedArray = [[inputString reverseObjectEnumerator] allObjects];

            int lenArray= (int)[inputString count];

            NSMutableArray *reverseString=[[NSMutableArray alloc]initWithCapacity:lenArray];

                for (int i = lenArray-1; i >= 0; i--) {
                    [reverseString addObject:inputString[i]];
                }

               for(int i=0;i<=lenArray-1;i++)
                {
                    NSLog(@"%@\n", [reverseString objectAtIndex:i]);
                }
    return 0;
  }
}