手写题-给加减乘除运算加括号

570 阅读1分钟

如题

现已知一个字符串是由正整数和加减乘除四个运算符(+ - * /)组成。
例如存在字符串 const str = '11+2-3*4+5/2*4+10/5',现在需要将高优先级运算,用小括号包裹起来,例如结果为 '11+2-(3*4)+(5/2*4)+(10/5)'。注意可能会出现连续的乘除运算,需要包裹到一起。
请用 javascript 实现这一过程

思路

思考:🤔括号什么时候加?

遇到第一个 ‘*/’时候需要在数字左侧加左括号,当左括号存在的时候遇到第一个‘+-’的时候给数字右侧加有括号,

参考思路 image.png

解法


const addkuohao = (str) => {
    const retArr = []
    const rule = '+-*/'
    const specialRule = '*/'
    const strArr = str.split('')
    let opening =false
    strArr.forEach( (item,idx) => {
            if(rule.indexOf(item) !== -1) {
                // 是+-*/符号
                if(specialRule.indexOf(item) !== -1) {
                    if(!opening) {
                        opening = !opening
                        retArr.splice((retArr.length)-1,0, '(')
                    }
                    retArr.push(item)
                } else {
                    if(opening) {
                        opening = !opening
                        retArr.push(')')
                    } 
                    retArr.push(item)
                }
            } else if(/\d/.test(item)) {
                // 数字
                retArr.push(item)
            }
    }) 
   return  retArr.join('')
}
console.log(addkuohao(str));

这里有一个类似问题 利用双栈解决的 blog.csdn.net/qq_44366571…