Buen día todos vengo aquí por que tengo hacer un programa que evalué una expresión postfija, pero no se por que truena al entrar a unos de los ciclos de evaluación he estado utilizando varios métodos para lograrlo y en todos no ha funcionado, anexo el código y toda la ayuda que me puedan brindar la agradezco mucho :
A una condición para este programa es que se debe de seguir estrictamente el algoritmo de una expresión infija-postfija, pero la función de creación funciona satisfactoriamente el problema ocurre en la evaluación, todo lo comentado es código de prueba o métodos que probé y tampoco funcionaron
double evaluapost (vector<string> p) {
stack<double> pila;
char e;
string s;
int j = 0,k = 0,l = 0;
unsigned int i = 0,m;
double op1, op2, n, r;
string::iterator aux;
//int d;
/*for (m= 0; m < p.size(); m++) {
cout << p.at(m);
}*/
//cout << endl;
while (i < p.size()) {
s = p.at(i);
e = s.at(j);
if (e >= '0' && e <= '9') {
/*aux = s.begin();
cout << *aux << endl;
cout << e << endl;
cin >> d;*/
/*while (aux < s.end() && e != '.') {
k++;
e = s.at(k);
++aux;
}*/
cout << e << endl;
for (m = 0; (m < s.size()) && (l == 0); m++) {
if (e != '.') {
k++;
e = s.at(k);
}
else {
l = 1;
k++;
}
/*cout << l << endl;
cout << k << endl;
cout << m << endl;
cout << s.size() << endl; aqui entra pero truena */
}
l = 0;
e = s.at(j);
cout << k << endl;
//aux = s.begin();
/*cout << *aux << endl;
cout << k << endl;
cin >> d;*/
/*while (aux <= s.end()) {
if (e != '.' && l == 0) {
n += (e - '0')*pow(10, k-j-1);
}
else if (e == '.') {
l = 1;
}
else {
n += (e - '0')*pow(10, k-j);
}
j++;
e = s.at(j);
++aux;
}*/
for (aux = s.begin(); aux != s.end(); ++aux) {
if (e != '.' && l == 0) {
n += (e - '0')*pow(10, k-j-1);
}
else if (e == '.') {
l = 1;
}
else {
n += (e - '0')*pow(10, k-j);
}
j++;
e = s.at(j);
}
cout << n << endl;
pila.push(n);
}
else if (e >= 'A' && e <= 'D') {
cout << "Introduzca valor de la variable: ";
cin >> n;
pila.push(n);
}
else if (e == '+' || e == '-' || e == '*' || e == '/') {
op2 = pila.top();
pila.pop();
op1 = pila.top();
pila.pop();
switch (e) {
case '+':
r = op1 + op2;
break;
case '-':
r = op1 - op2;
break;
case '*':
r = op1*op2;
break;
case '/':
if (op2 != 0) {
r = op1/op2;
}
else {
cout << "¡Error!" << endl;
cout << "Una de las operaciones es invalida" << endl;
r = 0;
}
break;
}
}
i++;
j = 0;
k = 0;
l = 0;
}
return r;
}