Tienes que crearte un programa que traduzca la operacion a algo entendible por c.
Este es un ejemplo que serviria para operaciones sencillas (como la que tu has puesto):
Código C:
Ver originalint main ()
{
int i, j;
int num_numeros=0;
int num_comandos=0;
int numeros[10];
int val_aux;
char comando[10];
char var_aux[10];
char operacion[100]="2 + 3 - 1 + 9-3 + 4";
memset (var_aux
, 0, sizeof(var_aux
)); memset (comando
, 0, sizeof(comando
));
j=0;
for (i
= 0; i
< strlen (operacion
); i
++) {
if (operacion[i] >= '0' && operacion[i] <= '9')
{
var_aux[j] = operacion[i];
j++;
}
else
{
if (j>0) /* Si no es numero quiere decir que ya tenemos el valor completo */
{
numeros
[num_numeros
] = atoi (var_aux
); num_numeros++;
j=0;
memset (var_aux
, 0, sizeof(var_aux
)); }
if (operacion[i] != ' ') /* si no es un blanco tiene que ser un operador +,-,* */
{
comando[num_comandos] = operacion[i];
num_comandos++;
}
}
}
if (j>0) /* lo ponemos de nuevo pora pillar el ultimo numero */
{
numeros
[num_numeros
] = atoi (var_aux
); num_numeros++;
j=0;
memset (var_aux
, 0, sizeof(var_aux
)); }
/* cada 2 numeros tiene que haber un operador 'a + b' */
/* con lo que si tenemos a + b - c :
1) 'a + b' calculamos la primera operacion
2) '(a+b) - c' para la siguiente operacion usamos el resultado anterior */
j=0;
for (i=0; i<num_comandos; i++)
{
switch (comando[i])
{
case '+':
val_aux = numeros[j] + numeros[j + 1];
numeros[j+1] = val_aux;
j++;
break;
case '-':
val_aux = numeros[j] - numeros[j + 1];
numeros[j+1] = val_aux;
j++;
break;
/* case '*' case '/' si quieres poner mas operaciones */
}
}
fprintf (stderr
, "OP: [%s] -> [%d]\n", operacion
, numeros
[j
]);
return 0;
}
Algunos ejemplos:
OP: [2 + 3 - 1] -> [4]
OP: [2 + 3 - 1 + 9-3 + 4] -> [14]