-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlab_4.cpp
169 lines (169 loc) · 3.76 KB
/
lab_4.cpp
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
#include <string.h>
//declaracion------------------------------------
struct _dato{
int n;
char palabra[25];
};
typedef _dato dato;
struct nodo{
dato info;
nodo *ant, *sig;
};
typedef nodo *ptnodo;
ptnodo lista_d = NULL;
//funiones----------------------------------------
void INSERTAR_FIN(ptnodo &Ld, dato X);
ptnodo ULTIMO(ptnodo &Ld);
void MOSTRAR_LISTA (ptnodo &Lista);
void BORRAR_LISTA(ptnodo &Ld);
void buscar_pal(ptnodo Ld, char pal[]);
using namespace std;
int main(){
ifstream A1;
char aux[25], let, pal[25];
int i, flag = 0, cont = 0,opc = 0, ban = 0;
dato regis;
while(opc != 6){
cout << "Menu de opciones\n";
cout << "1.- Cargar un archivo de texto\n";
cout << "2.- Mostrar la lista de palabras\n";
cout << "3.- Agregar datos\n";
cout << "4.- Buscar palabra\n";
cout << "5.- Opcion extra\n";
cout << "6.- Salir\n";
cin >> opc;
system("cls");
switch(opc){
case 1:
cont = 0;
if(lista_d != NULL)
BORRAR_LISTA(lista_d);
A1.open("texto.txt");
if (!A1){
cout << "Problemas con archivo\n";
break;
}
A1.get(let);
while(! A1.eof()){
i = 0;
flag = 0;
while(isalpha(let)){
aux[i] = let;
A1.get(let);
i ++;
flag = 1;
}
if(flag == 1){
aux [i] = '\0';
cont ++;
regis.n = cont; strcpy(regis.palabra,aux);
INSERTAR_FIN(lista_d, regis);
}
A1.get(let);
}
ban = 1;
A1.close();
break;
case 2:
if (ban){
MOSTRAR_LISTA (lista_d);
}else
cout << "Se deben cargar los datos primero\n";
break;
case 3:
break;
case 4:
cout << "ingrese la palabra a buscar\n";
cin.ignore(1);
cin.getline(pal, 25);
buscar_pal(lista_d, pal);
break;
case 5:
break;
case 6:
if(lista_d != NULL)
BORRAR_LISTA(lista_d);
break;
default:
cout << "Ingrese una opcion valida\n";
break;
}
}
return 0;
}
void INSERTAR_FIN(ptnodo &Ld, dato X){
ptnodo NUEVO, U;
NUEVO = new(nodo);
NUEVO -> info = X;
NUEVO -> sig = NULL; NUEVO -> ant = NULL;
if(Ld == NULL) Ld = NUEVO;
else
{ U = ULTIMO(Ld);
U -> sig = NUEVO;
NUEVO -> ant = U;
}
}
ptnodo ULTIMO(ptnodo &Ld){
ptnodo A = Ld;
if(A != NULL){
while (A -> sig != NULL)
A = A -> sig;
return A;
}else {
cout << "Lista vacia\n";
return NULL; }
}
void MOSTRAR_LISTA (ptnodo &Lista){
ptnodo A = Lista;
if (A != NULL){
while(A != NULL){
cout << setw(3) << A -> info.n << setw(20) << A -> info.palabra << endl;
A = A -> sig;
}
}
else cout << "Lista vacia\n";
}
void BORRAR_LISTA(ptnodo &Ld){
ptnodo P = Ld;
if(Ld != NULL){
if(P == Ld && P -> sig == NULL)
Ld = NULL;
else{
Ld = Ld -> sig;
Ld -> ant = NULL;
}
delete(P);
BORRAR_LISTA(Ld);
}
}
void buscar_pal(ptnodo Ld, char pal[]){
ptnodo A = Ld, P[15];
int b = 0, a = 4, i = 0;
for(i = 0; i < b; i++)
P[i] = NULL;
if(A != NULL){
while(A != NULL){
a = strcmp(pal, A -> info.palabra);
if(!a){
b ++;
P[i] = A;
i++;
}
A = A -> sig;
}
}else{
cout << "La lista esta vacia\n";
}
if (b){
cout << "Palabra encontrada\n";
for(i = 0; i < b; i++){
cout << setw(3) << P[i] -> info.n << setw(20) << P[i] -> info.palabra << endl;
P[i] = NULL;
}
}else
cout << "No hay coincidencia\n";
}