2012-09-18 27 views
-4

我喜欢将字符串标记为字符并将标记存储在字符串数组中。我正尝试使用下面的代码,因为我使用C符号来访问数组,所以无法正常工作。什么需要改变以代替旅行路线[i]?ios中的字符串标记器

NSArray *tokanizedTravelPath= [[NSArray alloc]init]; 
for (int i=0; [travelPath length]; i++) { 
    tokanizedTravelPath[i]= [travelPath characterAtIndex:i]; 
+3

将字符串拆分为单个字符不是“标记”它。 –

回答

1

您需要的NSMutableArray设置数组(否则你不能改变它的对象)。还有,你只能插入对象的数组中,这样你就可以的每一个元素:
- 插入的NSString包含角色;
- 改用C风格的数组。
这是如何与NSMutableArray的事:

NSMutableArray *tokanizedTravelPath= [[NSMutableArray alloc]init]; 
for (int i=0; i<[travelPath length]; i++) 
{ 
    [tokanizedTravelPath insertObject: [NSString stringWithFormat: @"%c", [travelPath characterAtIndex:i]] atIndex: i]; 
} 
+0

这段代码不会工作,因为for-condition是错误的。看我的帖子。 – vikingosegundo

+0

哦,是的,没有看到它。编辑。 –

1

不能存储unichar S IN的NSArray*。你究竟想要完成什么? NSString*已经是unichar的集合的一个很好的代表,并且您已经拥有其中的一个。

1

我在你的代码中计数3个错误,我在我的回答结束时解释它们。
首先,我想告诉你一个更好的方法来分解刺入它的字符。


虽然我与凯文同意的NSString是Unicode字符很大的代表性已经,您可以使用此基于块的代码,将其分割为多个子并将其保存到一个数组。

表格文档:

enumerateSubstringsInRange:options:usingBlock:
枚举的字符串指定范围的指定类型的 子串。

NSString *hwlloWord = @"Hello World"; 
NSMutableArray *charArray = [NSMutableArray array]; 
[hwlloWord enumerateSubstringsInRange:NSMakeRange(0, [hwlloWord length]) 
           options:NSStringEnumerationByComposedCharacterSequences 
          usingBlock:^(NSString *substring, 
             NSRange substringRange, 
             NSRange enclosingRange, 
             BOOL *stop) 
{ 
    [charArray addObject:substring]; 
}]; 
NSLog(@"%@", charArray); 

输出:

(
    H, 
    e, 
    l, 
    l, 
    o, 
    " ", 
    W, 
    o, 
    r, 
    l, 
    d 
) 

但实际上,你的问题是另一种性质的:

  • NSArray是不可改变的。一旦实例化,它不能被改变。对于可变阵列,可以使用NSArray子类NSMutableArray

  • 此外,characterAtIndex不会返回一个对象,而是一个原始类型 - 但这些不能保存到NSArray。您必须将其包装到NSString或其他表示中。

    您可以改为使用substringWithRange

    NSMutableArray *tokanizedTravelPath= [NSMutableArray array]; 
    for (int i=0; i < [hwlloWord length]; ++i) { 
        NSLog(@"%@",[hwlloWord substringWithRange:NSMakeRange(i, 1)]); 
        [tokanizedTravelPath addObject:[hwlloWord substringWithRange:NSMakeRange(i, 1)]]; 
    } 
    
  • 此外,您的for循环是错误的for循环条件不正确。它必须是for (int i=0; i < [travelPath length]; i++)