X-Git-Url: https://git.llucax.com/z.facultad/75.29/susanita.git/blobdiff_plain/f975b96aef520fcd47d8b571f6e1f19d0779870c..3cf8caf3c30d7790d1467466ecd556b399cbb301:/src/parser.cpp diff --git a/src/parser.cpp b/src/parser.cpp index 2d8ae55..c4453cc 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -50,6 +50,9 @@ input(const std::string& filename) return false; Persona::sexo_type sexo = Persona::M; Persona::sexo_type opuesto = Persona::F; + + Susanita::size_type cap = get_n(filename); + std::string l; while (std::getline(f, l)) { @@ -68,21 +71,27 @@ input(const std::string& filename) Persona* pp = susanita.get_persona(nombre); if (!pp) { - pp = new Persona(nombre, sexo); + pp = new Persona(nombre, sexo, cap); susanita.add_persona(pp); } - Persona::prefs_type prefs; + int count = 0; while (ss) { std::string nombre = get_hasta(ss, ','); + nombre = strip(nombre); + if (nombre.empty()) { + continue; + } Persona* ppp = susanita.get_persona(nombre); if (!ppp) { - ppp = new Persona(nombre, opuesto); + ppp = new Persona(nombre, opuesto, cap); susanita.add_persona(ppp); } pp->prefs.push_back(ppp); + pp->prefs_hash[ppp->nombre] = count; + count++; } } return true; @@ -111,3 +120,27 @@ output() const } } +/// Hack medio feo para obtener el N del problema +Susanita::size_type +Parser:: +get_n(const std::string& filename) +{ + std::ifstream f(filename.c_str()); + if (!f) + return 0; + std::string l; + if (!std::getline(f, l)) + return 0; + std::istringstream ss(strip(l)); + // descartamos el nombre + get_hasta(ss, ':'); + // contamos personas en la lista + Susanita::size_type count = 0; + while (ss) + { + if (!strip(get_hasta(ss, ',')).empty()) + ++count; + } + return count; +} +