Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - digitalx2

#1
necesito seprarar una cadena de caracteres, que enrealidad seran numeros y operadores matematicos
pero no logro asignar lso valores de *prt a una cadena para despues haceres push (meterlos a mi estructura/pila  A") el strtok no lo se usar muy bien , soy nuevo en cadenas y se me complica mucho ._ . todo lo que esta comentado es por que no funciona.. osea deja de funcionar el programa...


por ejemplo (para los que no conozcan la notacion polaca inversa)

mi input es:

5 6 9 + 8 5 *
esto quedaria como
5 11 40
siempre el operador matematico se aplicara a los dos ultimos valores
entonces necesito separar la cadena inicial para saber si es digito o un operador matematico
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>
#define MAX 100 /* max size of operand or operator */
typedef int stackEntry;
typedef struct {stackEntry data[MAX]; int index; }Stack;

int isFull(Stack);
int isEmpty(Stack);
void push(Stack*,stackEntry);
stackEntry pop(Stack*);


void create(Stack *s){s->index=-1;}

int main(void)
{
Stack A;
int type,i;
stackEntry k;
stackEntry op2;
char s[MAX],aux[MAX];
create(&A);
/* if(A.index==-1){printf(" Pila Inicializada index: %d" ,A.index);} solo una prueba*/
push(&A,6);push(&A,5);push(&A,7);pop(&A);pop(&A);pop(&A);
printf("\nPush y Pop funcionan correctamente");
getche();
system("cls");
printf("Escribe\n"); i=0;
{
char s2[4] = " \n\t";
char *ptr;
fgets(s,MAX,stdin);
/*system("cls");
/* printf( "A stack = %s\n", s );*/

ptr = strtok( s, s2);    /* Primera llamada => Primer token*/
printf( "%s\n", ptr );
while( (ptr = strtok( NULL, s2 )) != NULL )    /*Posteriores llamadas*/

/*strcpy(aux,ptr); i++; printf("\n aux var = %s",aux);

/*if(isdigit(*ptr)){ k=atoi(ptr);push(&A,k);}
/*if(ptr=='+'){push(&A,pop(&A)+pop(&A));}
if(ptr=='*'){push(&A,pop(&A)*pop(&A));}
*/
printf( "%s\n", ptr);
/*printf("\npop:%d",A.data[A.index]);*/
return 0;
}

}

int isFull(Stack s){
if (s.index==MAX-1)
return 1;
else
return 0;}

int isEmpty(Stack s){
if(s.index==-1)
return 1;
else  return 0;
}

void push(Stack *s, stackEntry dato)
{
if(isFull(*s)){printf("\nError pila llena"); return;}
s->index+=1;
s->data[s->index] = dato;
printf("\ndato:%d ",dato)/*use este printf para comprobar que mi push y pop funcionaran adecuadamente*/;
}


stackEntry pop(Stack*s)
{
if(isEmpty(*s)){printf("error: stack empty\n"); return -1;}
printf("\npop: %d\n",s->data[s->index--]);
return 1;

}