设计一个可以进行四则运算,包括括号,小数的c++程序
时间: 2024-02-25 17:56:55 浏览: 20
以下是一个可以进行四则运算,包括括号,小数的C++程序:
```c++
#include <iostream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
bool isOperator(char c) {
return (c == '+' || c == '-' || c == '*' || c == '/');
}
int getPriority(char op) {
if (op == '*' || op == '/') return 2;
if (op == '+' || op == '-') return 1;
return 0;
}
double calculate(char op, double a, double b) {
switch(op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
default: return 0;
}
}
double evaluate(string expression) {
stack<double> numbers;
stack<char> operators;
vector<string> tokens;
string token = "";
for (int i = 0; i < expression.length(); i++) {
if (expression[i] == ' ') continue;
if (isdigit(expression[i]) || expression[i] == '.') {
token += expression[i];
if (i == expression.length()-1) {
tokens.push_back(token);
}
} else {
if (token != "") {
tokens.push_back(token);
token = "";
}
if (expression[i] == '(') {
operators.push(expression[i]);
} else if (expression[i] == ')') {
while (!operators.empty() && operators.top() != '(') {
double b = numbers.top(); numbers.pop();
double a = numbers.top(); numbers.pop();
char op = operators.top(); operators.pop();
double result = calculate(op, a, b);
numbers.push(result);
}
operators.pop();
} else if (isOperator(expression[i])) {
while (!operators.empty() && getPriority(operators.top()) >= getPriority(expression[i])) {
double b = numbers.top(); numbers.pop();
double a = numbers.top(); numbers.pop();
char op = operators.top(); operators.pop();
double result = calculate(op, a, b);
numbers.push(result);
}
operators.push(expression[i]);
}
}
}
if (token != "") {
tokens.push_back(token);
}
while (!operators.empty()) {
double b = numbers.top(); numbers.pop();
double a = numbers.top(); numbers.pop();
char op = operators.top(); operators.pop();
double result = calculate(op, a, b);
numbers.push(result);
}
return numbers.top();
}
int main() {
string expression = "((2+3)*4-1)/5";
double result = evaluate(expression);
cout << "Result: " << result << endl;
return 0;
}
```
该程序通过使用两个栈来实现四则运算,一个栈用于存储数字,另一个栈用于存储运算符。同时,为了支持小数的运算,程序使用了字符串来解析表达式。程序首先将表达式中的数字和运算符存储到一个字符串向量中,然后按照四则运算的规则计算表达式的值。