Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _POSIX_C_SOURCE 200809L
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include "cola.h"
- #include "lista.h"
- #include <ctype.h> // Para la funcion isdigit
- void imprimir_linea(cola_t* cola){
- while(!cola_esta_vacia(cola)){
- char* linea = cola_desencolar(cola);
- fprintf(stdout, "%s\n", linea);
- free(linea);
- }
- }
- bool buscar_subcadena(char* subcadena, char* linea){
- int i = 0, k = 0;
- size_t len = strlen(subcadena);
- while(linea[i] != '\0'){
- if(linea[i] == subcadena[k]){
- k++;
- for(; k < len; k++){
- if(linea[i + k] != subcadena[k]){
- k = 0;
- break;
- }
- }
- if(k != 0){
- return true;
- }
- }
- i++;
- }
- return false;
- }
- int main(int argc, char* argv[]){
- if(argc < 3){
- fprintf(stderr, "Cantidad de parametros incorrecta\n");
- return -1;
- }
- if(!isdigit(argv[2])){
- fprintf(stderr, "Parametros incorrectos\n");
- return -1;
- }
- int orden = atoi(argv[2]);
- if(!orden || orden < 0){
- fprintf(stderr, "Parametros incorrectos\n");
- return -1;
- }
- FILE* archivo = NULL;
- if(argc == 3){
- archivo = stdin;
- }
- else{
- archivo = fopen(argv[3], "r");
- if(archivo == NULL){
- fprintf(stderr, "El archivo no se pudo leer\n");
- return -1;
- }
- }
- char* subcadena = argv[1];
- char* linea = NULL;
- size_t tam = 0;
- cola_t* cola = cola_crear();
- int n = 0;
- while(getline(&linea, &tam, archivo) != EOF){
- char* n_linea = malloc(sizeof(char) * (strlen(linea) + 1));
- strcpy(n_linea, linea);
- cola_encolar(cola, n_linea);
- if(n > orden){
- char* linea_borrada = cola_desencolar(cola);
- free(linea_borrada);
- }
- n++;
- if(buscar_subcadena(subcadena, linea)){
- imprimir_linea(cola);
- n = 0;
- }
- }
- cola_destruir(cola, free);
- fclose(archivo);
- free(linea);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement