簡體   English   中英

簡單的數學表達式從左到右解決了目標c

[英]Simple math expression solve in objective c from left to right

我只是在目標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。

雖然編寫自己的函數是最后一個選項,但我真的不想搞亂字符串函數。 我想用內置的東西。

謝謝,

** * ** * *工作方案* ** * ****

感謝您對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);

不確定它是否與@Ozair相同Kafray說......

對於附加到字符串的每個運算符,首先添加a )並添加匹配(在開頭。即

10
(10 ) +
(10 ) + 5
((10 ) + 5 ) *
((10 ) + 5 ) * 2

只需確保在刪除操作符時也刪除括號。

沒有內置的方法可以做到這一點,我知道。 我想你只需卷起袖子寫一個功能。 如果要使用objective-c,請使用NSScanner。

從您在評論中回答我的問題,您在輸入過程中生成字符串。 我建議你在除第一個操作數之外的每個操作數后添加一個括號。

因此,您不要在10之后向字符串添加任何內容,然后添加運算符+ 之后為5每個操作數添加一個右括號)和相應的左括號(到字符串的開頭。同樣在2之后。這樣你就不必編寫自己的任何東西來處理字符串了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM