JS:根据优先级添加括号

题干:已知一个字符串是由正整数和加减乘除四个运算符(+_*%)组成,如:'11+2-3*4+5/2*4+10/5',现需要将高优先级运算,用小括号包裹起来,例结果为:'11+2-(3*4)+(5/2*4)+(10/5)'

思路:

1.将目标字符串以普通运算符(+、-)分割成数组

2.根据数组的每一个元素是否含有高级运算符(*、%)来判断是否加以括号包裹该元素

3.将数组以拆分符拼接成数组

js实现:

function formatOperaStr(str) {
  let commonOperaQueue = []
  let rst = []
  if (str.includes('+')) {
    commonOperaQueue.push('+')
    rst = str.split('+')
  } else if (str.includes('-')) {
    commonOperaQueue.push('-')
    rst = str.split('-')
  }
  if (rst.length > 0) {
    commonOperaQueue.push('-')
    return rst
      .map((item) => {
        let newItem = item.includes('-') ? item.split('-') : item
        if (Array.isArray(newItem) && newItem.length > 0) {
          newItem = newItem
            .map((childItem) => {
              return childItem.includes('*') || childItem.includes('%')
                ? `(${childItem})`
                : childItem
            })
            .join(commonOperaQueue[1])
        }
        return !newItem.includes('-') &&
          (newItem.includes('*') || newItem.includes('%'))
          ? `(${newItem})`
          : newItem
      })
      .join(commonOperaQueue[0])
  } else {
    return str
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值