我只是在目標c NSString中有這個表達式:@「10 + 5 * 2」。 我想自動解決這個表達和碰到的溶液:簡單的數學表達式從左到右解決目標c
UIWebView *webView = [[UIWebView alloc] init];
NSString *result = [webView stringByEvaluatingJavaScriptFromString:expression];
NSLog(@"%@",result);
上述工作良好,但它產生的結果:20 實際上這個評估「*」第一裝置,第一確實5 * 2 = 10 + 10. 但是我想刪除這個優先級,並且只是希望每個運算符從左到右具有相同的優先級,以便答案可以是10 + 5 = 15 * 2 = 30.
雖然編寫自己的函數是最後一個選項,但我真的不想搞亂字符串函數。我想使用內置的東西。
感謝,
** * ** * *工作液* ** * ****
感謝您的幫助Eiko和Ozair! 根據他們的答案,我寫了這一堆代碼,這完全適合我!
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);
你可以修改字符串還是來自用戶或其他系統? – 2011-06-17 07:37:58
使用括號怎麼樣? – marzapower 2011-06-17 07:38:40
@Ozair:我使用按鈕和標籤創建了這個字符串。 @marzapower:我不想任何括號,這將從左到右評估沒有任何優先。 – necixy 2011-06-17 07:40:24