📅  最后修改于: 2023-12-03 15:27:36.368000             🧑  作者: Mango
在编程中,我们有时需要给表达式加上括号以改变运算顺序。但手动添加括号会耗费很多时间和精力,因此编写一个程序来自动添加括号会非常方便。
下面是一个使用Javascript编写的给表达式加括号的程序示例。
function addParentheses(exp) {
let stack = [];
let dotFlag = false;
for (let i = exp.length - 1; i >= 0; i--) {
if (exp[i] === ')') {
stack.push(exp[i]);
dotFlag = true;
} else if (exp[i] === '(') {
stack.pop();
dotFlag = false;
} else if (/\d/.test(exp[i])) {
if (dotFlag) {
while (stack.length && stack[stack.length - 1] !== ')') {
stack.pop();
}
stack.pop();
stack.push('(' + exp[i] + ')');
dotFlag = false;
} else {
stack.push(exp[i]);
}
} else {
stack.push(exp[i]);
}
}
while (stack.length) {
stack.pop();
}
return stack.join('').split('').reverse().join('');
}
该函数接受一个表达式作为参数。函数内部使用了一个栈(stack)和一个标志位(dotFlag)。
遍历表达式字符串,每遇到一个右括号(')')就将其压入栈中,并将标志位设置为true;每遇到一个左括号('(')就将栈顶的右括号弹出,并将标志位设置为false;如果遇到一个数字,则需要根据标志位来决定是否添加括号;如果遇到运算符,则直接压入栈中。
最后我们将栈清空,并将其中的元素按照反序拼接起来,就得到了加好括号的表达式。
let exp = '3+5*2^8/(7-2)';
let result = addParentheses(exp); // 返回: (3+((5*(2^8))/((7-2))))
使用程序自动添加括号可以大大减少编写复杂表达式的工作量,同时保证了表达式的正确性。本例中的代码只是一个简单的示例,您可以根据实际需求对其进行修改,从而实现更加复杂的功能。