He eliminado lo del signo ^ y ahora despues de la x tendria que ir un numero directamente o nada si el exponente es 1.
Código [Seleccionar]
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>
#include <iostream>
typedef struct{
int coeficiente;
int potencia;
}monomio;
int main(){
std::string ecuacion = "+3x2-2x1+9x5-4+5x3+1";
for(int i = 0; i < ecuacion.size(); i++){
//std::cout << ecuacion[i];
if(ecuacion[i] == '+' || ecuacion[i] == '-'){
}
}
int exponente = 0; //Exponente por defecto
int j = 1; //La posicion 0 ya sabemos que es + o -
// Longitud del coeficiente:
while(j < monomio.size() && isdigit(monomio[j]){
j = j + 1;
}
if(j = 1){//No hay numeros despues del signo
std::cout << "La estructura no es correcta, no hay numeros despues del signo " << std::endl;
return 1;
}
coeficiente = monomio.substring(0,j); //Ya tenemos el coeficiente con el signo
//Comprobar si es el termino independiente
if( i < monomio.size()){
if(monomio[i] != 'x'){
std::cout << "La estructura no es correcta, falta una x" << std::endl;
return 1;
}
coeficiente = 1; //El coeficiente por defecto sera 1
int j = j + 1;
//Si no acaba en la x tiene que seguir con el exponente
int inicio = 1;
while( j < monomio.size() && isdigit(monomio[j])){
j = j + 1;
}
// Si no hay digitos despues de la x o hay algo mas devuelve error.
if(j = inicio || j < monomio.size()){
std::cout << "Error" << std::endl;
return 1;
}
exponente = monomio.substring(inicio,j));
}
return 0;
}