📅  最后修改于: 2023-12-03 15:15:27.861000             🧑  作者: Mango
在本次挑战中,你需要实现一个函数,该函数接收一个包含加法和减法的字符串表达式,例如 "3+2-4",并返回其结果,例如 1。
一个包含加减法的字符串表达式,长度不超过100。
计算结果,为一个整数。
这是一个简单的算法问题,我们可以通过遍历输入字符串,解析每个数字和符号,然后计算结果。
我们可以定义变量 sum
来保存累计的结果,并使用 nextOperator
变量来存储下一个操作的操作符。
在遍历字符串时,对于数字字符,我们可以将其转换为整数,并使用 nextOperator
变量来计算当前数字值应该进行的操作(加法或减法),并将其添加到 sum
变量中。
对于操作符字符,则需要更新 nextOperator
变量。
最后,我们在遍历完整个字符串后返回 sum
的值即可。
下面是具体实现:
function evaluateExpression(expression) {
let sum = 0;
let nextOperator = '+';
for (let i = 0; i < expression.length; i++) {
const char = expression.charAt(i);
if (/\d/.test(char)) {
let numStart = i;
let numEnd = i + 1;
while (numEnd < expression.length && /\d/.test(expression.charAt(numEnd))) {
numEnd++;
}
const num = parseInt(expression.substring(numStart, numEnd));
if (nextOperator === '+') {
sum += num;
} else {
sum -= num;
}
i = numEnd - 1;
} else if (char === '+' || char === '-') {
nextOperator = char;
}
}
return sum;
}
我们可以使用下面的测试用例来验证我们的实现是否正确:
const testCases = [
['3+2-4', 1],
['1+2+3+4+5', 15],
['1-2-3-4-5', -13],
['1+2-3+4-5', -1],
['-1+2+3-4+5', 5],
];
testCases.forEach(([expression, expected]) => {
const result = evaluateExpression(expression);
console.log(`Expression: ${expression}`);
console.log(`Expected: ${expected}`);
console.log(`Result: ${result}`);
console.log('-------------------------');
});
这将输出以下结果:
Expression: 3+2-4
Expected: 1
Result: 1
-------------------------
Expression: 1+2+3+4+5
Expected: 15
Result: 15
-------------------------
Expression: 1-2-3-4-5
Expected: -13
Result: -13
-------------------------
Expression: 1+2-3+4-5
Expected: -1
Result: -1
-------------------------
Expression: -1+2+3-4+5
Expected: 5
Result: 5
-------------------------
所有的测试用例都通过了,我们的解决方案完美地解决了这个问题。