// USO DE APUNTADORES, CADENAS, VECTORES /* DADA UNA OPERACION COMO CADENA DE TEXTO (1) SE REALICE LA OPERACION Y MUESTRE EL RESULTADO (a) # + # ó #+# (b) # - # ó #-# (2) O BIEN OPERE CON SUB CADENAS DE LA CADENA DE ENTRADA */ #include <string.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> int EsMas(char Letra) { return Letra=='+'; } int EsMenos(char Letra) { return Letra=='-'; } int EsEspacio(char Letra) { return Letra==' '; } int EsOperador(char Letra) { return EsMas(Letra) || EsMenos(Letra); } void leenumero(char *N, char *CAD) { char *Num = malloc(10); char *A = malloc(10); strcpy(A, CAD); strcpy(Num, ""); //A= "23 + 56" while( A[0] ) // se ejecuta hasta encontra el '3' { if ( isdigit(A[0]) ) sprintf(Num, "%s%c", Num, A[0]); // Num= "23" if ( EsOperador(A[0]) || EsEspacio(A[0]) ) { if ( EsEspacio(A[0]) ) A++; break; } A++; } strcpy(CAD,A); strcpy(N,Num); } int leeOperador(char *CAD) { char Opr; char *A = malloc(10); strcpy(A, CAD); while( A[0] ) { if ( EsOperador(A[0]) ) { Opr = A[0]; A++; break; } A++; } strcpy(CAD, A); return Opr; } int operacion(int n1, char opr, int n2) { switch (opr) { case '+': return n1+n2; break; case '-': return n1-n2; break; } } void parser(char *A) { char *num1,*num2, Opr; num1 = malloc(10); num2=malloc(10); leenumero(num1, A); Opr = leeOperador(A); printf("Num1= %s\n", num1); printf("Opr = %c\n", Opr); printf("A= %s\n", A); strcpy(num2, A); printf("Num2= %i\n", atoi(num2)); printf("%s %c %s = %i\n", num1, Opr, num2, operacion(atoi(num1), Opr, atoi(num2))); } int main(int a, char **A) { if ( a==2 ) parser(A[1]); else printf("debe ser un argumento ...\n"); }