Pagini recente » Cod sursa (job #1277345) | Cod sursa (job #2093652) | Cod sursa (job #2706029) | Cod sursa (job #338650) | Cod sursa (job #1460751)
#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 ;
}