我在这里遇到了一个相当讨厌的问题。看,我正在尝试打破一个字符串,我将其转化为单个字符和符号。该字符串始终采用等式的形式,如“3x + 4”或“x / 7 + 5”。我需要将字符串分成单个字符串的数组。例如,如果我有第一个等式,我想要一个具有“3”,“x”,“+”和“4”的NSMutableArray。以下是我使用的代码部分:
NSMutableArray* list = [[NSMutableArray alloc] initWithCapacity:10];
for (int i = 0; i < [self.equationToGuess length]; i++) {
NSRange range = {i, i};
NSString* string= [[NSString alloc] initWithString:[self.equationToGuess substringWithRange:range]];
[list addObject:string];
}
我已经确定检查self.equationToGuess是否总是包含使用调试器的等式,它确实如此。 list也能够获取一些对象,但问题是它只是将最后两个字符放在列表的一个架子中。因此,如果我有“3x + 4”等式,这段代码会将“3”,“x”和“+4”放入代码中,然后崩溃,因为它超出了字符串的长度。有谁知道如何解决这个问题?
答案 0 :(得分:2)
NSRange中的两个值不是起始和结束索引。相反,第一个是起始索引,第二个是范围的长度。所以你希望你的范围是
NSRange range = NSMakeRange(i, 1);
答案 1 :(得分:1)
让我们多做一点:
NSInteger numberOfCharacters = [self.equationToGuess length];
NSMutableArray *characterArray = [[NSMutableArray alloc] initWithCapacity:numberOfCharacters];
for (NSUInteger idx = 0; idx < numberOfCharacters; idx++) {
NSRange range = NSMakeRange(idx, 1);
[characterArray addObject:[self.equationToGuess substringWithRange:range]];
}
修改强>
在慷慨帮助谦卑的馅饼之后 - 这仍然不是最好的方法:如果你的等式具有多位数系数,它们将被分开。您是否考虑过使用NSScanner来拆分字符串?
答案 2 :(得分:0)
您也可以通过从字符串中获取字符来使用替代解决方案,因为您必须使用NSString的以下函数。
- (unichar)characterAtIndex:(NSUInteger)index
NSMutableArray* list = [[NSMutableArray alloc] initWithCapacity:10];
NSString* string;
for (int i = 0; i < [self.equationToGuess length]; i++)
{
string = [[NSString alloc] initWithFormat:@"%c",[self.equationToGuess characterAtIndex:i]];
[list addObject:string];
[string release];
string = nil ;
}
答案 3 :(得分:0)
NSInteger numberOfCharacters = [self.equationToGuess length];
NSMutableArray *characterArray = [[NSMutableArray alloc] initWithCapacity:numberOfCharacters];
for (NSUInteger idx = 0; idx < numberOfCharacters; idx++) {
[characterArray addObject:[NSString stringWithFormat:@"%c", [self.equationToGuess characterAtIndex:idx]]];
}