#include <stdio.h> #include <stdlib.h> #define LINHA_MAX 200 char *procura(const char s1[], const char s2[]) { const char *p1, *p2; for(; *s1 != '\0'; s1++) { for(p1 = s1, p2 = s2; *p1 != '\0' && *p1 == *p2; p1++, p2++) ; if(*p2 == '\0') return (char *)s1; /* s1 esta' contida em s2! */ if(*p1 == '\0') return NULL; /* o que sobra de s1 e' mais curto que s2. */ } return *s2 == '\0' ? (char *)s1 : NULL; } int main(int argc, char *argv[]) { char linha[LINHA_MAX]; FILE *entrada; if(argc != 3) { fprintf(stderr, "Tem de passar dois argumentos!\n"); return EXIT_FAILURE; } if((entrada = fopen(argv[2], "r")) == 0) { fprintf(stderr, "Erro abrindo o ficheiro \"%s\".\n", argv[2]); return EXIT_FAILURE; } while(fgets(linha, LINHA_MAX, entrada) != NULL) if(procura(linha, argv[1]) != 0) fputs(linha, stdout); fclose(entrada); return EXIT_SUCCESS; }