题目描述
实现一个基本的计算器来执行字符串形式的数学表达式计算。表达式仅包含非负整数、加号 +
、减号 -
、乘号 *
、除号 /
四种运算符和空格
。整数除法仅保留整数部分。
注意:
- 输入保证有效且只包含上述字符。
- 输入字符串中的数字和运算符之间可能包含一个或多个空格。
- 你不能使用内置的库函数如
eval()
或其他内置的数学运算函数直接计算结果。
示例
输入: "3+2*2"
输出: 7
输入: " 3/2 "
输出: 1
输入: " 3+5 / 2 "
输出: 5
PHP 示例代码
<?php
function calculate($s) {
$s = str_replace(' ', '', $s); // 去除空格
$stack = [];
$num = 0;
$sign = '+';
for ($i = 0; $i < strlen($s); $i++) {
if (is_numeric($s[$i])) {
$num = $num * 10 + intval($s[$i]);
}
if (!is_numeric($s[$i]) && $s[$i] != ' ' || $i == strlen($s) - 1) {
if ($sign == '+') {
$stack[] = $num;
} elseif ($sign == '-') {
$stack[] = -$num;
} elseif ($sign == '*') {
$stack[count($stack) - 1] *= $num;
} elseif ($sign == '/') {
$stack[count($stack) - 1] = intval($stack[count($stack) - 1] / $num);
}
$num = 0;
$sign = $s[$i];
}
}
$result = 0;
foreach ($stack as $num) {
$result += $num;
}
return $result;
}
// 测试
echo calculate("3+2*2") . "\n"; // 输出: 7
echo calculate(" 3/2 ") . "\n"; // 输出: 1
echo calculate(" 3+5 / 2 ") . "\n"; // 输出: 5
?>
Python 示例代码
def calculate(s):
s = s.replace(' ', '') # 去除空格
stack = []
num = 0
sign = '+'
for char in s:
if char.isdigit():
num = num * 10 + int(char)
if char in '+-*/' or char == s[-1]:
if sign == '+':
stack.append(num)
elif sign == '-':
stack.append(-num)
elif sign == '*':
stack[-1] *= num
elif sign == '/':
stack[-1] = int(stack[-1] / num)
num = 0
sign = char
return sum(stack)
# 测试
print(calculate("3+2*2")) # 输出: 7
print(calculate(" 3/2 ")) # 输出: 1
print(calculate(" 3+5 / 2 ")) # 输出: 5
JavaScript 示例代码
function calculate(s) {
s = s.replace(/\s+/g, ''); // 去除空格
let stack = [];
let num = 0;
let sign = '+';
for (let char of s) {
if (!isNaN(Number(char))) {
num = num * 10 + parseInt(char);
}
if (isNaN(Number(char)) || char === s[s.length - 1]) {
if (sign === '+') {
stack.push(num);
} else if (sign === '-') {
stack.push(-num);
} else if (sign === '*') {
stack[stack.length - 1] *= num;
} else if (sign === '/') {
stack[stack.length - 1] = Math.trunc(stack[stack.length - 1] / num);
}
num = 0;
sign = char;
}
}
return stack.reduce((acc, curr) => acc + curr, 0);
}
// 测试
console.log(calculate("3+2*2")); // 输出: 7
console.log(calculate(" 3/2 ")); // 输出: 1
console.log(calculate(" 3+5 / 2 ")); // 输出: 5
以上示例代码分别用 PHP、Python 和 JavaScript 实现了基本计算器的功能,能够处理包含空格的字符串表达式,并正确执行加、减、乘、除运算。