elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / [Duda] token/strtok /Notacion Polaca Inversa en: 22 Septiembre 2013, 22:31 pm
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
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <conio.h>
  5. #include <string.h>
  6. #define MAX 100 /* max size of operand or operator */
  7. typedef int stackEntry;
  8. typedef struct {stackEntry data[MAX]; int index; }Stack;
  9.  
  10. int isFull(Stack);
  11. int isEmpty(Stack);
  12. void push(Stack*,stackEntry);
  13. stackEntry pop(Stack*);
  14.  
  15.  
  16. void create(Stack *s){s->index=-1;}
  17.  
  18. int main(void)
  19. {
  20. Stack A;
  21. int type,i;
  22. stackEntry k;
  23. stackEntry op2;
  24. char s[MAX],aux[MAX];
  25. create(&A);
  26. /* if(A.index==-1){printf(" Pila Inicializada index: %d" ,A.index);} solo una prueba*/
  27. push(&A,6);push(&A,5);push(&A,7);pop(&A);pop(&A);pop(&A);
  28. printf("\nPush y Pop funcionan correctamente");
  29. getche();
  30. system("cls");
  31. printf("Escribe\n"); i=0;
  32. {
  33. char s2[4] = " \n\t";
  34. char *ptr;
  35. fgets(s,MAX,stdin);
  36. /*system("cls");
  37. /* printf( "A stack = %s\n", s );*/
  38.  
  39. ptr = strtok( s, s2);    /* Primera llamada => Primer token*/
  40. printf( "%s\n", ptr );
  41. while( (ptr = strtok( NULL, s2 )) != NULL )    /*Posteriores llamadas*/
  42.  
  43. /*strcpy(aux,ptr); i++; printf("\n aux var = %s",aux);
  44.  
  45. /*if(isdigit(*ptr)){ k=atoi(ptr);push(&A,k);}
  46. /*if(ptr=='+'){push(&A,pop(&A)+pop(&A));}
  47. if(ptr=='*'){push(&A,pop(&A)*pop(&A));}
  48. */
  49. printf( "%s\n", ptr);
  50. /*printf("\npop:%d",A.data[A.index]);*/
  51. return 0;
  52. }
  53.  
  54. }
  55.  
  56. int isFull(Stack s){
  57. if (s.index==MAX-1)
  58. return 1;
  59. else
  60. return 0;}
  61.  
  62. int isEmpty(Stack s){
  63. if(s.index==-1)
  64. return 1;
  65. else  return 0;
  66. }
  67.  
  68. void push(Stack *s, stackEntry dato)
  69. {
  70. if(isFull(*s)){printf("\nError pila llena"); return;}
  71. s->index+=1;
  72. s->data[s->index] = dato;
  73. printf("\ndato:%d ",dato)/*use este printf para comprobar que mi push y pop funcionaran adecuadamente*/;
  74. }
  75.  
  76.  
  77. stackEntry pop(Stack*s)
  78. {
  79. if(isEmpty(*s)){printf("error: stack empty\n"); return -1;}
  80. printf("\npop: %d\n",s->data[s->index--]);
  81. return 1;
  82.  
  83. }
  84.  
  85.  
  86.  
  87.  
  88.  
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines