15 // Para no exportar los símbolos (uso interno de este módulo)
18 /// Saca espacios de una palabra
19 std::string strip(std::string s) {
20 std::string ws = " \t\n";
21 int first = s.find_first_not_of(ws);
22 int last = s.find_last_not_of(ws);
25 int pos_first = s.find_first_of(ws);
26 if (pos_first == -1) {
29 return std::string("");
32 return s.substr(first,last-first+1).c_str();
35 /// Devuelve palabra hasta el caracter indicado
36 std::string get_hasta(std::istream& is, char hasta)
39 std::getline(is, s, hasta);
46 input(const std::string& filename)
48 std::ifstream f(filename.c_str());
51 Persona::sexo_type sexo = Persona::M;
52 Persona::sexo_type opuesto = Persona::F;
54 Susanita::size_type cap = get_n(filename);
57 while (std::getline(f, l))
60 // la linea vacia alterna de sexo
68 // obtenemos el nombre y la lista
69 std::istringstream ss(l);
70 std::string nombre = get_hasta(ss, ':');
71 Persona* pp = susanita.get_persona(nombre);
74 pp = new Persona(nombre, sexo, cap);
75 susanita.add_persona(pp);
81 std::string nombre = get_hasta(ss, ',');
82 nombre = strip(nombre);
86 Persona* ppp = susanita.get_persona(nombre);
89 ppp = new Persona(nombre, opuesto, cap);
90 susanita.add_persona(ppp);
92 pp->prefs.push_back(ppp);
93 pp->prefs_hash[ppp->nombre] = count;
104 for (Susanita::personas_type::const_iterator ih
105 = susanita.hombres.begin();
106 ih != susanita.hombres.end(); ++ih)
109 assert(h.estado == Persona::COMPROMETIDO);
110 std::cout << h.nombre << ", " << h.pareja->nombre << "\n";
113 for (Susanita::personas_type::const_iterator im
114 = susanita.mujeres.begin();
115 im != susanita.mujeres.end(); ++im)
118 assert(m.estado == Persona::COMPROMETIDO);
119 std::cout << m.nombre << ", " << m.pareja->nombre << "\n";
123 /// Hack medio feo para obtener el N del problema
126 get_n(const std::string& filename)
128 std::ifstream f(filename.c_str());
132 if (!std::getline(f, l))
134 std::istringstream ss(strip(l));
135 // descartamos el nombre
137 // contamos personas en la lista
138 Susanita::size_type count = 0;
141 if (!strip(get_hasta(ss, ',')).empty())