3-8 Encuentra el valor de la expresión del prefijo (20 puntos) (análisis detallado)

Las expresiones aritméticas tienen la forma de notación de prefijo, notación de infijo y notación de sufijo. La expresión de prefijo se refiere al operador binario antes de los dos operandos. Por ejemplo, la expresión de prefijo de 2 + 3 * (7-4) +8/4 es: + + 2 * 3-7 4/8 4. Diseñe un programa para calcular el valor de resultado de la expresión de prefijo.

Formato de entrada:
ingrese una expresión de prefijo de no más de 30 caracteres en una línea, que solo contenga +, -, *, / y operandos, y los diferentes objetos (operandos, operandos) están separados por espacios.

Formato de
salida : muestra el resultado del cálculo de la expresión de prefijo, con 1 decimal reservado, o el mensaje de error ERROR.

Muestra de entrada:

    • 2 * 3 - 7 4/8 4

Salida de muestra:

13,0

Para el mismo tipo de preguntas, los puntos de la prueba son básicamente los mismos y el enlace se adjunta

1-3 Conversión de expresión (25 puntos) (Mi ídolo es un hermano mayor)

Las ideas de procesamiento inicial son básicamente las mismas que las preguntas del enlace, pero no es fácil escribir al escribir, especialmente cuando hay signos negativos y puntos decimales. Luego, después de pensarlo, puedo interceptar la cadena directamente de acuerdo con el espacio. Ya es una buena forma. Después de la intercepción, atravesar, si la cadena actual es un símbolo, juzgar si el tamaño de la pila es mayor o igual a 2, si lo es, continuar, si no, cambiar el valor de la variable de identificación, salida ERROR (porque se encuentra el operador, significa que dos Si no es un operador, significa que es un número. Use la función stof directamente para convertir la cadena a un tipo de punto flotante y ponerla en la pila (la conversión la escribí yo mismo al principio. Hay muchos problemas que necesitan atención. Por ejemplo, si el primer carácter es un signo menos, si hay un punto decimal, debe realizar aritmética de dos partes, lo cual es un poco problemático, pero se puede hacer, y los amigos interesados ​​pueden intentarlo). Si la bandera sigue siendo verdadera, no hay error y la salida directamente El valor en la parte superior de la pila es el resultado de la operación. Al calcular, preste atención a quién está al frente y quién está detrás de los dos números (se refiere a operaciones de resta y división, los otros dos no tienen efecto)
#include <iostream>
#include <stack>
#include <vector>
#include <string>
using namespace std;

int main(){
    
    
	stack<double> st;
	string s,ss;
	getline(cin,s);
	vector<string> v;
	bool flag = true;
	for(int i = 0;i<s.length();i++){
    
    
		int j = i;
		while(s[j]!=' '&&j<s.length())
			j++;
		ss = s.substr(i,j-i);
		v.push_back(ss);
		i = j; 
	}
	for(int i = v.size()-1;i>=0;i--){
    
    
		ss = v[i];
		if(ss=="+"||ss=="-"||ss=="*"||ss=="/"){
    
    
			if(st.size()>=2){
    
    
				double a = st.top();
				st.pop();
				double b = st.top();
				st.pop();
				if(ss=="/"&&b==0){
    
    
					cout << "ERROR";
					flag = false;
				}
				else{
    
    
					if(ss=="+")
						st.push(a+b);
					else if(ss=="-")
						st.push(a-b);
					else if(ss=="*")
						st.push(a*b);
					else
						st.push(a/b);
				}
			}
			else{
    
    
				cout << "ERROR";
				flag = false;
				break;
			}
		}
		else{
    
    
			st.push(stof(ss));
		}
	}
	if(flag)
		printf("%.1lf",st.top());
	return 0;
} 

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45845039/article/details/109137724
Recomendado
Clasificación