Última actualización:2026-10-12
Diseño de una calculadora de pila en C++¶
Escribir una calculadora de pila con el siguiente diseño:
- Admite las operaciones
+,-,*,/ - Admite la entrada en notación postfija
Por ejemplo:
Salida: ¿Cómo implementarla?Las dos cuestiones más clave son:
1.Cómo tokenizar
2.Cómo implementar la pila
1. Cómo tokenizar¶
Primero definimos la entrada como una cadena separada por espacios; así podemos dividir cada token con istringstream. El marco básico es:
2. Cómo implementar la pila¶
Para una calculadora, lo más esencial es apilar y desapilar.
- Al encontrar un número, se apila
- Al encontrar un operador, se desapila y se calcula
Con esto ya podemos escribir el marco:
if (isNumber(token)) {
pushNumber(token);
} else if (isOperator(token)) {
popAndCal(token);
} else {
throw std::runtime_error("Invalid token in expression.");
}
popAndCal es el núcleo del cálculo, por ejemplo:
void popAndCal(const std::string& token) {
if (operandStack.size() < 2) {
throw std::runtime_error("Invalid expression.");
} else {
double operand2 = operandStack.top();
operandStack.pop();
double operand1 = operandStack.top();
operandStack.pop();
double result = performOperation(operand1, operand2, token);
operandStack.push(result);
}
}
De este modo, en la pila queda almacenado el resultado que buscábamos y basta con devolver top al final.
¿No es sencillísimo? Te invito a discutirlo conmigo.
Temas relacionados¶
- Implementando C++ FnOnce a mano | C++那些事
- Pequeño proyecto gRPC en C++ | C++那些事
- Comunicación entre procesos en C++ en la práctica | C++那些事
- Demo de servicio de URL cortas en C++ | C++那些事
- C++17 y SQLite para medir el tamaño de directorios | C++那些事
- Pruebas de rendimiento con Google Benchmark | C++那些事
- Servidor HTTP con corrutinas de C++20 | C++那些事
- Serialización ZeroCopy con Protobuf | C++那些事
- Acelerar Python con pybind11 | C++那些事