gpt4 book ai didi

iphone - 从左到右在 objective c 中求解简单的数学表达式

转载 作者:太空狗 更新时间:2023-10-30 03:57:59 24 4
gpt4 key购买 nike

我只是在 objective-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相同说……

对于您附加到字符串的每个运算符,首先添加一个 ) 并在开头添加匹配的 (。即

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

只需确保在删除运算符时也删除括号。

关于iphone - 从左到右在 objective c 中求解简单的数学表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6382725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com