This repository has been archived by the owner on Oct 24, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
77 lines (67 loc) · 2.56 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <stdlib.h>
#include "anagramas.h"
#ifndef MAXSTRSIZE
#define MAXSTRSIZE 100
#endif
int
main( void )
{
printf ( "Layendo archivo...\n" );
// Abrir archivo strings.txt
FILE * Fstrings = fopen ( "strings.txt", "r" );
// Si el archivo no existe, terminar
if ( !Fstrings )
{
printf ( "No se encontro el archivo strings.txt" );
exit ( EXIT_FAILURE );
}
// Declarar e inicializar contadores
// n = tamanyo del array strings
// l = linea actual en el archivo ( que corresponda a las string )
// c = cuantos int ha encontrado
int n = 2, l = 0, c = 0;
// Declarar el array strings y asignar espacio basico
char** strings = ( char** ) malloc ( n * sizeof( char* ) );
// Declarar el array counts que contiene los ints/contadores del archivo
int counts[2];
// Procesar el archivo
while ( ( fscanf ( Fstrings, "%d\n", &counts[c] ) && c++ <= 2 && (l--)+2 ) || ( fscanf ( Fstrings, "%s\n", strings[l] ) ) )
{
// Verificar si el array tiene espacio suficiente para los proximos elementos
if ( l == n )
{
// Duplicar el espacio del array
n *= 2;
strings = ( char** ) realloc ( strings, n * sizeof( char* ) );
// TODO: Evitar el sobrellenado de memoria
}
if (c == 2 && l < counts[0]) // Si se obtubieron los strings a comparar, pero no el de comparacion, alojar espacio
{
// Alojar la string de comparacion
l++;
strings[l] = ( char* ) malloc ( MAXSTRSIZE * sizeof( char ));
}
else if ( c == 2 && l == counts[0] ) // Si ya se obtubieron los strings a comparar, empezar a compararlos
{
printf ( "Comparada string %s: %d anagrama encontrado\n------------------\n\n", strings[l], anagramas ( strings, l, strings[l] ));
}
else if ( feof( Fstrings ) ) // Si ya no hay mas strings para comparar, dejar de leer el archivo
{
break;
}
else // Si todavia estamos leyendo strings a comparar, mostrarlas mientras se leen
{
if ( l >= 0 ) // Solo si ya leimos el primer contador, mostrar la string leida actualmente
printf( "%d, %s\n", l+1, strings[l] );
// Alojar la siguiente string
l++;
strings[l] = ( char* ) malloc ( MAXSTRSIZE * sizeof( char ));
}
}
// Cerrar el archivo
fclose( Fstrings );
printf( "Adios~\n" );
// Retorno exitoso
return EXIT_SUCCESS;
}