Cita de: NOB2014 en 7 Abril 2014, 15:42 PM
...................................................
...........lo que me trae ahora es que alguien me diga cómo puedo poner el operador – en una variable como la operador luego lo pondré en un arreglo para con un if establecer el correspondiente.- ......................... ....................
Lo primero es lo primero y es ni más ni menos que eliminar de la subcadena auxiliar los espacios en blanco, que luego la lían parda. Esto lo consigues con una pequeña modificación en tu código:
Código (cpp) [Seleccionar]
for (i = inicio + 1, j = 0; i < final; i++)
if (cadena[i]!=' '){
auxiliar[j] = cadena[i];
j++;
}
auxiliar[j] = '\0';
printf("\n%s\n", auxiliar);
Lo segundo es que a priori estableces que los números se compongan de un solo dígito, cuando podrían estar formados por varios dígitos y ya te fastidiarían las cuentas de dónde está el signo,etc. Esto lo puedes arreglar con:
Código (cpp) [Seleccionar]
i=0;
for (j=0,k=0;auxiliar[j];j++){
if (isdigit(auxiliar[j])){
aux[k][i]=auxiliar[j];
i++;
}
if (!isdigit(auxiliar[j])){
op=auxiliar[j];
aux[k][i]='\0';
i=0,k++;
}
}
aux[k][i]='\0';
Y lo del operador, que lo pillas en el trozo de código anterior en op, basta con usar una variable char op que guarde el tipo de operación y luego en un switch seleccionarla de forma automática. Algo como:
Código (cpp) [Seleccionar]
switch(op){
case'+':resultado = atoi(aux[0]) + atoi(aux[1]);
break;
case'-':resultado = atoi(aux[0]) - atoi(aux[1]);
break;
case'*':resultado = atoi(aux[0]) * atoi(aux[1]);
break;
case'/':resultado = atoi(aux[0]) / atoi(aux[1]);
break;
/******* y mas *******/
}
printf("\nRESULTADO: %d", resultado);
Y ya tendrías una salida como esta, con la segunda linea de código:
Código (cpp) [Seleccionar]
char cadena[100] = "3 * 5 + (1 5 * 2 5 0) + 5", auxiliar[100] = {'\0'}, aux[10][10] = {'\0'}, op;
Citar
15*250
RESULTADO: 3750
Queda mucho por hacer, por ejemplo que exista más de una operación, que los números sean decimales, etc. Pero todo se va andando despacito.
Salu2!.