Miquel_Fuster

Tratado de cadena con una pila.

Sep 19th, 2021
808
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. #define MAX 50
  6.  
  7. struct nodo {
  8.     char simbolo;
  9.     struct nodo *sig;
  10. } *raiz = NULL;
  11.  
  12. void insertar(char x) {
  13.     struct nodo *nuevo;
  14.    
  15.     nuevo = malloc(sizeof(struct nodo));
  16.     nuevo->simbolo = x;
  17.     nuevo->sig = raiz;
  18.     raiz = nuevo;
  19. }
  20.  
  21. char extraer() {
  22.     char informacion = -1;
  23.     struct nodo *bor = raiz;
  24.    
  25.     if (raiz) {
  26.         informacion = raiz->simbolo;
  27.         raiz = raiz->sig;
  28.         free(bor);  
  29.     }
  30.    
  31.     return informacion;
  32. }
  33.  
  34. void liberar() {
  35.     struct nodo *bor;
  36.  
  37.     while(raiz) {
  38.         bor = raiz;
  39.         raiz = raiz->sig;
  40.         free(bor);
  41.     }
  42. }
  43.  
  44. int vacia() {
  45.     return raiz? 0 : 1;
  46. }
  47.  
  48. void cargarCadena(char *cadena) {
  49.     printf("Ingrese la cadena: ");
  50.     fgets(cadena, MAX, stdin);
  51. }
  52.  
  53. void imprimir_cadena_pila_auxiliar(struct nodo *n) {
  54.     if(n) {
  55.         imprimir_cadena_pila_auxiliar(n->sig);
  56.         putchar(n->simbolo);
  57.     }
  58. }
  59.  
  60. void imprimir_cadena_pila() {
  61.     imprimir_cadena_pila_auxiliar(raiz);
  62. }
  63.  
  64. int verificarCaracteres(char *cadena) {
  65.     for (size_t i=0, iterar=1; iterar && i<strlen(cadena); i++) {
  66.         switch(cadena[i]) {
  67.         case '@': // elimina la ultima palabra
  68.             ;
  69.             char c = extraer();
  70.             while(c != ' ' && c != -1)
  71.                 c = extraer();
  72.             if(c == ' ')
  73.                 insertar(' ');
  74.             break;
  75.         case ',': // elimina el ultimo caracter
  76.             if(!vacia())
  77.                 extraer();
  78.             break;
  79.         case '!': // elimina todos los caracteres introducidos
  80.             liberar();
  81.             break;
  82.         case '.': // termina el programa
  83.             iterar = 0;
  84.             break;
  85.         default: // introducir el caracter en la pila
  86.             insertar(cadena[i]);
  87.         }
  88.         imprimir_cadena_pila();
  89.         puts("");
  90.     }
  91.    
  92.     return !vacia();
  93. }
  94.  
  95.  
  96. int main() {
  97.     char cadena[MAX];
  98.    
  99.     cargarCadena(cadena);
  100.     if (verificarCaracteres(cadena)) {
  101.         printf("Proceso finalizado con √©xito");
  102.     } else {
  103.         printf("La cadena esta vacia");
  104.     }
  105.     liberar();
  106. }
RAW Paste Data