Cod sursa(job #1460751)

Utilizator perjulucianPerju Lucian Ionut perjulucian Data 13 iulie 2015 20:09:21
Problema Potrivirea sirurilor Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 1.83 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Queue{
    int val ;
    struct Queue * next ;
}Queue ;
void push_queue(Queue ** first , Queue ** last , int val){
    if( *first == NULL){

        *first = (Queue*)malloc(sizeof(Queue));
        (*first)->val = val ;
        *last = *first ;
        (*first)->next = NULL ;
        return ;
    }
    Queue * nou = (Queue*)malloc(sizeof(Queue));
    nou->val =val ;
    nou->next = NULL ;

    (*last)->next = nou ;
    *last = nou ;

}
int main(){
    FILE * in = fopen("strmatch.in","r");
    FILE * out = fopen("strmatch.out","w");

    char * A = NULL ;
    char * B = NULL ;

    int dim_A = 0 ,dim_B = 0;
    getline(&A , &dim_A , in);
    dim_A = strlen(A) - 1;
    printf("%d\n",dim_A );
    getline(&B , &dim_B , in);
    dim_B = strlen(B);
    printf("%s\n",A );

    if(dim_A > dim_B){
        char * aux ;
        int auxx ;
        aux = A ;
        A = B ;
        B = aux ;
        auxx = dim_A ;
        dim_A = dim_B ;
        dim_B = auxx ;
    }

    Queue * first = NULL , *last = NULL ;
    int stop = dim_B - dim_A ;
    int total = 0 , start ,ok;
    int i,j ;
    for (i = 0 ; i < stop ; i++){
        start = i ;
        ok = 1 ;
        for(j = 0 ; j < dim_A ; j++){
            if(A[j] != B[start+j]){
                ok = 0 ;
                break ;
            }
        }
        if(ok){
            total ++ ;
            push_queue(&first,&last,start);
        }
    }
    fprintf(out, "%d\n",total );
    if(total > 0){
        Queue * cursor = first ;
        Queue * tmp ;
        while(cursor != NULL){
            tmp = cursor  ;
            fprintf(out, "%d ",cursor->val );
            cursor = cursor->next ;
            free(tmp );
        }
        fprintf(out, "\n" );
    }    
    free(A);
    free(B);


    fclose(in);
    fclose(out);
    return 0 ;
}