]> git.llucax.com Git - z.facultad/75.29/susanita.git/blobdiff - src/parser.cpp
tagged entrega1
[z.facultad/75.29/susanita.git] / src / parser.cpp
index 2d8ae559d6337b2ae8702d0745e7f4479405e85c..c4453ccdc074fec79b8df1ee5aa5fa50d8a7db67 100644 (file)
@@ -50,6 +50,9 @@ input(const std::string& filename)
                return false;
        Persona::sexo_type sexo = Persona::M;
        Persona::sexo_type opuesto = Persona::F;
                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))
        {
        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)
                {
                Persona* pp = susanita.get_persona(nombre);
                if (!pp)
                {
-                       pp = new Persona(nombre, sexo);
+                       pp = new Persona(nombre, sexo, cap);
                        susanita.add_persona(pp);
                }
 
                        susanita.add_persona(pp);
                }
 
-               Persona::prefs_type prefs;
+               int count = 0;
                while (ss)
                {
                        std::string nombre = get_hasta(ss, ',');
                while (ss)
                {
                        std::string nombre = get_hasta(ss, ',');
+                       nombre = strip(nombre);
+                       if (nombre.empty()) {
+                               continue;
+                       }
                        Persona* ppp = susanita.get_persona(nombre);
                        if (!ppp)
                        {
                        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);
                                susanita.add_persona(ppp);
                        }
                        pp->prefs.push_back(ppp);
+                       pp->prefs_hash[ppp->nombre] = count;
+                       count++;
                }
        }
        return true;
                }
        }
        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;
+}
+