请用C++语言,编写一个程序,主要功能是完成加、减、乘、除四则运算,而且支持连续计算,如4+5+7-8或4*5-6等运算。连续计算的实现借助于开发工具中预定义的数据结构Stack(栈)实现。
时间: 2024-10-09 10:12:13 浏览: 14
在C++中,我们可以使用栈数据结构来实现连续计算的功能。这里是一个简单例子,它使用了STL库中的stack容器来存储操作数和操作符,当遇到一个新的操作符时,就将前两个操作数弹出栈,并结合当前操作符进行计算,然后再将结果压回栈中。
```cpp
#include <iostream>
#include <stack>
#include <sstream>
double perform_operation(double a, double b, char op) {
switch(op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b; // 注意这里需要检查除数是否为0
default: throw std::invalid_argument("Unsupported operation");
}
}
void evaluate_expression(const std::string& expression, std::stack<double>& operands, std::stack<char>& operators) {
std::istringstream iss(expression);
double num;
char op;
while (iss >> num) {
operands.push(num);
}
if (iss.peek() != EOF) {
throw std::runtime_error("Invalid expression");
}
while (!operators.empty()) {
op = operators.top();
operands.pop();
operands.pop();
double b = operands.top();
operands.pop();
double a = operands.top();
operands.push(perform_operation(a, b, op));
operators.pop();
}
}
int main() {
std::stack<double> operands;
std::stack<char> operators;
std::string input;
while (std::getline(std::cin, input)) {
if (input == "+-") { // 示例:输入4+-5表示从栈顶拿走4,再拿走5进行计算
operands.pop();
operands.pop();
} else {
evaluate_expression(input, operands, operators);
}
if (!operands.empty()) {
double result = operands.top();
std::cout << "Result: " << result << std::endl;
operands.pop(); // 输出后移除栈顶元素
} else {
std::cout << "No more calculations." << std::endl;
}
}
return 0;
}
```
此代码会读取用户的输入,如果输入是"+"或"-", 则表示连续计算,否则按常规方式进行四则运算。请注意,这个实现假设连续的 "+" 和 "-" 表示连续操作,如果需要更复杂的连续运算模式,比如链表或更复杂的数据结构,可能需要调整。