如题
现已知一个字符串是由正整数和加减乘除四个运算符(+ - * /)组成。
例如存在字符串 const str = '11+2-3*4+5/2*4+10/5',现在需要将高优先级运算,用小括号包裹起来,例如结果为 '11+2-(3*4)+(5/2*4)+(10/5)'。注意可能会出现连续的乘除运算,需要包裹到一起。
请用 javascript 实现这一过程
思路
思考:🤔括号什么时候加?
遇到第一个 ‘*/’时候需要在数字左侧加左括号,当左括号存在的时候遇到第一个‘+-’的时候给数字右侧加有括号,
参考思路
解法
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…