美文网首页
iOS 计算字符串中方程式

iOS 计算字符串中方程式

作者: 花里胡哨00 | 来源:发表于2022-05-24 10:30 被阅读0次

#pragma mark - zx计算字符串中方程式:支持的计算符号有+-*/以及括号

-(NSString*)calculation:(NSString*)content{

    if([content containsString:@"("]) {//有括号的递归计算

        //获取括号中的所有内容

        NSArray*strarr = [content componentsSeparatedByString:@"("];

        NSMutableArray *marr1 = [NSMutableArray new];

        for(NSString*str in strarr) {

            [marr1 addObject:[str componentsSeparatedByString:@")"].firstObject];

        }

        //计算括号中的内容

        for(NSString*str in marr1) {

            //判空

            if([str length]) {

                //先计算最里层内容

                NSString*firstSTR = [str substringToIndex:1];

                NSString*lastSTR = [str substringFromIndex:str.length-1];

                //分割出来的内容,第一位和最后一位不是 +-*/ ,就是括号最里面的内容

                if(![@"+-*/" containsString:firstSTR] && ![@"+-*/" containsString:lastSTR]) {

                    NSString*str2 = [self calculation:str];

                  //替换计算结果

                    content = [content stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"(%@)",str] withString:str2];

                }

            }

        }

        //计算玩括号里面的计算括号外的

        content = [self calculation:content];

    }else{//没有括号的字符串方程式计算

        NSMutableArray *marr2 = [[content componentsSeparatedByCharactersInSet:[NSCharacterSet  characterSetWithCharactersInString:@"+-*/"]] mutableCopy];

        //获取字符串中所有+-*/符号

        NSMutableArray *marr3 = [[content componentsSeparatedByCharactersInSet:[NSCharacterSet  characterSetWithCharactersInString:@"1234567890."]] mutableCopy];

        //去除数组中空字符

        NSMutableArray *marr4 = [NSMutableArray new];

        for(NSString*str in marr3) {

            if([str length]) {

                [marr4 addObject:str];

            }

        }

        //先乘除后加减

        NSArray*arr =@[@"*/",@"+-"];

        for(NSString*str in arr) {

          for(int i =0; i<marr4.count;i++){

                NSString*str2 = marr4[i];

                NSString*str4;

                if([str containsString:str2]) {

                    if([str2 containsString:@"*"]) {

                        str4 = [NSString stringWithFormat:@"%f",([marr2[i]  doubleValue] * [marr2[i+1]  doubleValue])];

                    }else if([str2 containsString:@"/"]) {

                        str4 = [NSString stringWithFormat:@"%f",([marr2[i]  doubleValue] / [marr2[i+1]  doubleValue])];

                    }else if([str2 containsString:@"+"]) {

                        str4 = [NSString stringWithFormat:@"%f",([marr2[i]  doubleValue] + [marr2[i+1]  doubleValue])];

                    }else if([str2 containsString:@"-"]) {

                        str4 = [NSString stringWithFormat:@"%f",([marr2[i]  doubleValue] - [marr2[i+1]  doubleValue])];

                    }

                    NSString*str3 = [NSString stringWithFormat:@"%@%@%@",marr2[i],str2,marr2[i+1]];

                    content = [content stringByReplacingOccurrencesOfString:str3 withString:str4];

                    marr2[i] = str4;  marr2[i+1] = str4;

                }

            }

        }

    }

    return content;

}

相关文章

网友评论

      本文标题:iOS 计算字符串中方程式

      本文链接:https://www.haomeiwen.com/subject/aprjprtx.html