#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;
}
网友评论