美文网首页
计算任意字符串算式的结果

计算任意字符串算式的结果

作者: 雨影 | 来源:发表于2020-08-12 09:44 被阅读0次

    该算法不包含括号运算!
    主要思路是利用递归算法
    1、先把减法变成加法,把除法变成乘法
    2、截取优先级低的算式,将优先级高的算式递归调用本身算出结果

    直接上代码

    
    func calcuterResult(input: String) -> Double {
        let newStr = input.replacingOccurrences(of: "-", with: "+-") //减法变加法
            .replacingOccurrences(of: "/", with: "*1/") //除法变乘法
        return calcuter(input: newStr)
    }
    
    func calcuter(input: String) -> Double {
    
        if input.contains("+") { // 加法运算
    
            var result = 0.0
            let values = input.components(separatedBy: "+") 
            for value in values {
    
                guard !value.isEmpty else { continue }
                if let num = Double(value) {
                    result = result + num
                } else {
                    result = result + calcuter(input: value)
                }
            }
            return result
    
        } else { // 乘法结果
    
            var result = 1.0
            let values = input.components(separatedBy: "*")
            for value in values {
    
                guard !value.isEmpty else { continue }
                if let num = Double(value) {
                    result = result * num
                } else {
                    // "1/2" ,"1/5"
                    let coms = value.components(separatedBy: "/")
                    if let num = coms.last {
                        result = result * 1 / (Double(num) ?? 1)
                    }
                }
            }
            return result
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:计算任意字符串算式的结果

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