У меня просто есть это выражение в цели c NSString: @ "10 + 5 * 2".
Я хотел решить это выражение автоматически и нашел решение:
UIWebView *webView = [[UIWebView alloc] init];
NSString *result = [webView stringByEvaluatingJavaScriptFromString:expression];
NSLog(@"%@",result);
Вышеописанное работает хорошо, но дает результат: 20.
На самом деле это оценивает «*», во-первых, сначала 5 * 2 = 10 + 10.
Но я хочу удалить этот приоритет и просто хочу, чтобы каждый оператор имел одинаковый приоритет слева направо, чтобы ответ мог быть 10 + 5 = 15 * 2 = 30.
Хотя написание собственной функции - последний вариант, но я действительно не хочу портить строковые функции. Я хотел бы использовать что-то встроенное.
Спасибо
******* Рабочий раствор ********
Спасибо за вашу помощь, Эйко и Озаир!
Основываясь на их ответах, я написал этот пакет кода, который отлично работает для меня!
NSString *expression = lblBox.text; // Loads the original expression from label.
expression = [expression stringByReplacingOccurrencesOfString:@"+" withString:@")+"];
expression = [expression stringByReplacingOccurrencesOfString:@"-" withString:@")-"];
expression = [expression stringByReplacingOccurrencesOfString:@"*" withString:@")*"];
expression = [expression stringByReplacingOccurrencesOfString:@"/" withString:@")/"];
NSUInteger count = 0, length = [expression length];
NSRange range = NSMakeRange(0, length);
while(range.location != NSNotFound)
{
range = [expression rangeOfString: @")" options:0 range:range];
if(range.location != NSNotFound)
{
range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
count++;
}
}
for (int i=0; i<count; i++) {
expression = [@"(" stringByAppendingString:expression];
}
UIWebView *webView = [[UIWebView alloc] init];
NSString *result = [webView stringByEvaluatingJavaScriptFromString:expression];
[webView release];
NSLog(@"%@ = %@",expression, result);