Objective-C Расчет строкового значения - PullRequest
2 голосов
/ 20 мая 2011

Это моя главная:

int x=0;
NSString *new=[[NSString alloc]initWithString:@"9+4"];
x=[new intValue];
NSLog(@"hi %i",x);

Это приводит к 9 .... С тех пор, как значение intValue строки будет читать только цифры и останавливается, когда символ не является цифрой.

Так, как я могу напечатать результат моей строки и получить вместо него 13 ??

Ответы [ 5 ]

8 голосов
/ 15 января 2012

На самом деле, NSExpression был создан именно для этого:

NSExpression *expression = [NSExpression expressionWithFormat:@"9+4"];
// result is a NSNumber
id result = [expression expressionValueWithObject:nil context:nil];

NSLog(@"%@", result);

NSExpression очень мощный, я предлагаю вам прочитать об этом.Вы можете использовать переменные, передавая объекты через строку формата.

0 голосов
/ 20 мая 2011

При попытке проанализировать выражение в строке вы захотите использовать Обратная польская запись . Вот первый пример Я перебираю в поиске Google Objective-C.

0 голосов
/ 20 мая 2011

Вам нужно будет проанализировать и оценить его самостоятельно, так как, казалось бы, простые вычисления, подобные этому, выходят за рамки основного анализа строк, который предоставляет вам Apple.Это может показаться легким, если вы привыкли интерпретировать такие языки, как Ruby, Perl и тому подобное.Но для скомпилированной языковой поддержки оценка выражений во время выполнения встречается редко (есть языки, которые их поддерживают, но Objective-C не является одним из них).

0 голосов
/ 20 мая 2011

Изменить эту строку

NSString *new=[[NSString alloc]initWithString:@"9+4"];

до

NSString *new=[NSString stringWithFormat:@"%f",9+4];
0 голосов
/ 20 мая 2011

Вам придется анализировать его вручную. Вы могли бы написать подкласс NSString, который переопределяет метод intValue, и анализирует его, чтобы найти арифметические символы и выполнить математику, но это настолько близко к автоматическому, насколько вы собираетесь, я боюсь

...