-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcrossref.h
More file actions
113 lines (91 loc) · 2.54 KB
/
crossref.h
File metadata and controls
113 lines (91 loc) · 2.54 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#ifndef CROSSREF_H
#define CROSSREF_H
#include <string>
#include <iostream>
#include "tabla_ordenada.h"
// siendo el tamano de datos n = numero de palabras
// O(nlogn + n)= O(nlogn) respecto al tiempo
// O(n) + O(n) + O(n) = O(n) memoria/ espacio auxiliar
class TCrossRef
{
private :
TTablaOrdenada<string, TSecuenciaDinamica<int>> _tabla ; // la memoria auxiliar se pone aqui
public :
void procesa(const string &linea, int numLinea)
{
string palabra;
for (int i = 0 ; i< linea.length() ; i++){
char c = linea[i];
if (isalpha(c) ){
palabra += tolower(c);
}
else if ( !palabra.empty()){
if (palabra.length() > 2){
TSecuenciaDinamica<int> lineas; // memoria aux
if (_tabla.esta(palabra)){
lineas = _tabla.consulta(palabra);
bool encontrado = false;
lineas.reinicia();
while( !lineas.esFin() && !encontrado){
if (lineas.actual() == numLinea){
encontrado = true;
}
lineas.avanza();
}
if (!encontrado){
lineas.inserta(numLinea);
_tabla.inserta(palabra,lineas);
}
}
else{
lineas.inserta(numLinea);
_tabla.inserta(palabra,lineas);
}
}
palabra.clear();
}
}
// caso particular para la ultima palabra
if (!palabra.empty() && palabra.length()>2){
TSecuenciaDinamica<int> lineas;
if (_tabla.esta(palabra)){
lineas = _tabla.consulta(palabra);
bool encontrado = false;
lineas.reinicia();
while (!lineas.esFin() && !encontrado){
if (lineas.actual() == numLinea){
encontrado = true;
}
lineas.avanza();
}
if (!encontrado){
lineas.inserta(numLinea);
_tabla.inserta(palabra,lineas);
}
}
else
lineas.inserta(numLinea);
_tabla.inserta(palabra,lineas);
}
};
void imprimir(){
TSecuenciaDinamica<string> palabras = _tabla.recorreClave();
palabras.reinicia();
while (!palabras.esFin()){
string palabra = palabras.actual();
TSecuenciaDinamica<int> lineas = _tabla.consulta(palabra);
cout << palabra << " ";
lineas.reinicia();
while (!lineas.esFin()){
cout<< lineas.actual();
lineas.avanza();
if (!lineas.esFin())
cout << " ";
}
cout << endl;
palabras.avanza();
}
cout << "----"<< endl;
}
} ;
#endif