输入一个整数表达式(只有加减),计算该表达式的值。表达式有可能会有连续的加号或减号,如1+2++++3,连续的+看作是省略了0,即1+++2相当于1+0+0+2。 要求输入数据要写成一个函数。 18+19-5+2-14 8+10001-6+21-30据此润色一下上面的程序
时间: 2024-10-29 13:20:10 浏览: 4
你可以创建一个名为`calculate_expression`的函数,接受一个字符串类型的参数`expression`,然后按照给定规则处理连续的加减运算符。以下是根据上述要求修改后的代码:
```cpp
#include <iostream>
#include <string>
#include <cctype>
std::string simplify_expression(const std::string &input) {
std::string simplified;
for (size_t i = 0; i < input.length(); ++i) {
// 如果遇到数字
if (isdigit(input[i])) {
simplified += input[i];
// 如果遇到加号或者减号,如果前一个是数字,则追加一个加号
} else if (i > 0 && isdigit(input[i - 1]) && (input[i] == '+' || input[i] == '-')) {
simplified += '0';
} else {
simplified += input[i];
}
}
return simplified;
}
int calculate_expression(const std::string &expression) {
// 先简化输入表达式,去掉连续的加号和减号
expression = simplify_expression(expression);
int result = 0;
bool last_was_plus = true;
for (char ch : expression) {
if (isdigit(ch)) {
int num = ch - '0';
while (isdigit(expression[++expression.begin()])) {
num = num * 10 + (expression[expression.begin()] - '0');
}
if (last_was_plus) {
result += num;
} else {
result -= num;
}
} else if (ch == '+' || ch == '-') {
last_was_plus = (ch == '+');
}
}
return result;
}
int main() {
std::string expression1 = "18+19-5+2-14";
std::string expression2 = "8+10001-6+21-30";
std::cout << "Simplified Expression 1: " << simplify_expression(expression1) << std::endl;
std::cout << "Calculated Expression 1: " << calculate_expression(simplify_expression(expression1)) << std::endl;
std::cout << "Simplified Expression 2: " << simplify_expression(expression2) << std::endl;
std::cout << "Calculated Expression 2: " << calculate_expression(simplify_expression(expression2)) << std::endl;
return 0;
}
```
在这个版本中,我们添加了一个辅助函数`simplify_expression()`,先将输入的表达式简化后再传递给`calculate_expression()`函数计算。这样可以确保只处理有效的运算符。在`main`函数中,我们还展示了简化表达式的步骤以及计算的结果。
阅读全文