#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// Definición de la estructura de un nodo de la lista vinculada
struct Nodo {
string nombre;
Nodo* siguiente;
};
// Función para insertar un nombre en la lista vinculada
void insertarNombre(Nodo*& lista, string nombre) {
Nodo* nuevoNodo = new Nodo;
nuevoNodo->nombre = nombre;
nuevoNodo->siguiente = nullptr;
if (lista == nullptr) {
lista = nuevoNodo;
} else {
Nodo* actual = lista;
while (actual->siguiente != nullptr) {
actual = actual->siguiente;
}
actual->siguiente = nuevoNodo;
}
}
// Función para ordenar la lista vinculada de nombres
void ordenarNombres(Nodo*& lista) {
if (lista == nullptr || lista->siguiente == nullptr) {
return;
}
Nodo* actual = lista;
Nodo* siguiente = nullptr;
string temp;
while (actual->siguiente != nullptr) {
siguiente = actual->siguiente;
while (siguiente != nullptr) {
if (actual->nombre > siguiente->nombre) {
temp = actual->nombre;
actual->nombre = siguiente->nombre;
siguiente->nombre = temp;
}
siguiente = siguiente->siguiente;
}
actual = actual->siguiente;
}
}
// Función para guardar los nombres ordenados en un archivo
void guardarNombresEnArchivo(Nodo* lista, string nombreArchivo) {
ofstream archivo(nombreArchivo);
if (archivo.is_open()) {
Nodo* actual = lista;
while (actual != nullptr) {
archivo << actual->nombre << endl;
actual = actual->siguiente;
}
archivo.close();
cout << "Los nombres se han guardado en el archivo exitosamente." << endl;
} else {
cout << "No se pudo abrir el archivo para guardar los nombres." << endl;
}
}
int main() {
string nombreArchivoEntrada = "nombres.txt";
string nombreArchivoSalida = "nombres_ordenados.txt";
Nodo* listaNombres = nullptr;
string nombre;
// Leer los nombres del archivo de entrada
ifstream archivoEntrada(nombreArchivoEntrada);
if (archivoEntrada.is_open()) {
while (getline(archivoEntrada, nombre)) {
insertarNombre(listaNombres, nombre);
}
archivoEntrada.close();
// Ordenar los nombres
ordenarNombres(listaNombres);
// Guardar los nombres ordenados en el archivo de salida
guardarNombresEnArchivo(listaNombres, nombreArchivoSalida);
} else {
cout << "No se pudo abrir el archivo de entrada." << endl;
}
return 0;
}