Colocar una expresión aritmética en un vector

Iniciado por GominaTilted, 15 Abril 2019, 15:06 PM

0 Miembros y 1 Visitante están viendo este tema.

GominaTilted

Buenas, ya tengo arreglado el código de las notaciones, pero revisando el resto del programa, me he dado cuenta de que hice una cosa mal. Mi intención era guardar en un vector cada elemento de una expresión aritmética, pero lo que estaba haciendo en realidad era guardar toda la expresión en un elemento:


void Expresion :: SetExp (string x)
{
    infija.push_back(x); // infija es un vector de la clase Expresion
}


Lo que yo había pensado era recorrer el string x carácter a carácter con un bucle, pero eso tiene un inconveniente, y es que para números mayores de una cifra estaría mal el algoritmo. Entonces, tengo esto:


void Expresion :: SetExp (string x)
{
    unsigned int i, j = 0;
    for (i = 0; x[i] < x.length(); i++)
    {
         while (isdigit(c[j]))
         {
              /* aquí hacer algo de tal forma que se guarden todos los numeros, que es lo
               que vengo a preguntar. Se me ha ocurrido crear una string vacía e ir
               guardando los numeros ahí para al salir del bucle while almacenarlo en el
               vector, pero no sé cómo hacerlo realmente. Ahora que pienso esto necesitaría
               además, antes del while, un if con la misma condición para realizar el
               guardado correctamente. Como véis tengo una idea más o menos clara pero
               no lo sé implementar*/
         }
         j = 0;
         infija.push_back[x[i]]

GominaTilted

#1
Bueno, de momento tengo esto, pero no hace nada, o eso parece xD:


void Expresion::PonerExpresion (string c)
{
    int i, j;
    string x, y;
   
    for (i = 0; i < c.length(); i++)
    {

    if(y == "+" || y == "-" || y == "*" || y == "/" || y == "(" || y == ")")
{
infija.push_back(y);
cout << y << " Signos " << endl;
}

while (isdigit(c[i]))
{
x += c[i];
cout << x << " while isdigit " << endl;
i++;
}

infija.push_back(x);
x = "";
y = c[i];

    for (j = 0; j < infija.size(); j++) //muestra el vector para verificar el resultado.
{
cout << infija[j];
}
}
    return;
}


Edit: Arreglado :)

lfgmespino

Ligera modificación para que funcione.

Código (cpp) [Seleccionar]


void PonerExpresion (std::string c)
{
    int i, j;
    std::string x, y;
    std::vector<std::string> infija;
   
    i=0;
    while (i < c.length()) {

  x = ""; 
  while (isdigit(c[i])) {
    x += c[i];
    std::cout << x << " while isdigit " << '\n';
    i++;
  }
infija.push_back(x); 
 
  y = c[i];
    if(y == "+" || y == "-" || y == "*" || y == "/" || y == "(" || y == ")") {
    infija.push_back(y);
    std::cout << y << " Signos " << '\n';
  }
 
  i++;

      for (j = 0; j < infija.size(); j++) //muestra el vector para verificar el resultado.
  {
    std::cout << infija[j];
   
}
    return;
}