Проблема с NSString и NSRange - PullRequest
1 голос
/ 28 мая 2011

У меня тут довольно неприятная проблема.Видите, я пытаюсь разбить строку, которую я получаю на отдельные символы и символы.Строка всегда имеет форму уравнения, например, «3x + 4» или «x / 7 + 5».Мне нужно разделить строку в массив отдельных строк.Например, если бы у меня было первое уравнение, я бы хотел иметь массив NSMutableArray, который имеет «3», «x», «+» и «4».Вот фрагмент кода, который я использую:

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», а затем происходит сбой, потому что он выходит за пределы длины строки.Кто-нибудь знает как это исправить?

Ответы [ 4 ]

2 голосов
/ 28 мая 2011

Два значения в NSRange не являются начальным и конечным индексом.Скорее, первый - это начальный индекс, а второй - длина диапазона.Таким образом, вместо этого вы хотите, чтобы ваш диапазон был

NSRange range = NSMakeRange(i, 1);
1 голос
/ 28 мая 2011

Давайте сделаем это с еще большим размахом:

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, чтобы разделить строку вместо

0 голосов
/ 28 мая 2011
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]]];
}
0 голосов
/ 28 мая 2011

Вы также можете использовать альтернативное решение, получая символы из вашей строки, для этого вам придется использовать следующую функцию 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 ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...