Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.79 KB | None | 0 0
  1. #define _POSIX_C_SOURCE 200809L
  2.  
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <stdbool.h>
  7. #include "cola.h"
  8. #include "lista.h"
  9. #include <ctype.h> // Para la funcion isdigit
  10.  
  11. void imprimir_linea(cola_t* cola){
  12.     while(!cola_esta_vacia(cola)){
  13.         char* linea = cola_desencolar(cola);
  14.         fprintf(stdout, "%s\n", linea);
  15.         free(linea);
  16.     }
  17. }
  18.  
  19. bool buscar_subcadena(char* subcadena, char* linea){
  20.     int i = 0, k = 0;
  21.     size_t len = strlen(subcadena);
  22.     while(linea[i] != '\0'){
  23.         if(linea[i] == subcadena[k]){
  24.             k++;
  25.             for(; k < len; k++){
  26.                 if(linea[i + k] != subcadena[k]){
  27.                     k = 0;
  28.                     break;
  29.                 }
  30.             }
  31.             if(k != 0){
  32.                 return true;
  33.             }
  34.         }
  35.         i++;
  36.     }
  37.     return false;
  38. }
  39.  
  40. int main(int argc, char* argv[]){
  41.     if(argc < 3){
  42.         fprintf(stderr, "Cantidad de parametros incorrecta\n");
  43.         return -1;
  44.     }
  45.     if(!isdigit(argv[2])){
  46.         fprintf(stderr, "Parametros incorrectos\n");
  47.         return -1;
  48.     }
  49.     int orden = atoi(argv[2]);
  50.     if(!orden || orden < 0){
  51.         fprintf(stderr, "Parametros incorrectos\n");
  52.         return -1;
  53.     }
  54.     FILE* archivo = NULL;
  55.     if(argc == 3){
  56.         archivo = stdin;
  57.     }
  58.     else{
  59.         archivo = fopen(argv[3], "r");
  60.         if(archivo == NULL){
  61.             fprintf(stderr, "El archivo no se pudo leer\n");
  62.             return -1;
  63.         }
  64.     }
  65.     char* subcadena = argv[1];
  66.     char* linea = NULL;
  67.     size_t tam = 0;
  68.     cola_t* cola = cola_crear();
  69.     int n = 0;
  70.     while(getline(&linea, &tam, archivo) != EOF){
  71.         char* n_linea = malloc(sizeof(char) * (strlen(linea) + 1));
  72.         strcpy(n_linea, linea);
  73.         cola_encolar(cola, n_linea);
  74.         if(n > orden){
  75.             char* linea_borrada = cola_desencolar(cola);
  76.             free(linea_borrada);
  77.         }
  78.         n++;
  79.         if(buscar_subcadena(subcadena, linea)){
  80.             imprimir_linea(cola);
  81.             n = 0;
  82.         }
  83.     }
  84.     cola_destruir(cola, free);
  85.     fclose(archivo);
  86.     free(linea);
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement