Universidad de Costa Rica 
 | 
  
  | 
    
       
    
       
   | 
  
    
       
   | 
  
    
       
    
       
   | 
Duración: 2 horas. Lea bien el examen antes de hacerlo. El examen es a libro abierto. Cuenta la documentación. Cuenta la redacción y la ortografía. Puede hacer el examen con lápiz. Resuelva todas las preguntas. ¡No haga más de lo que se le pide!
1) [33 pts] En su tarea programada usted usó la función "
rebuildDquote()" 
para restaurar el valor de la hilera de entrada después de 
detectar un error en los datos. Otra forma de proceder es leer la 
hilera a memoria sin hacerle cambios y, si se puede determinar que 
no hay errores, en ese caso se procede a remplazar los caracteres 
adecuadamente, como se muestra en estos ejemplos:
flujo/entrada memoria getNextCSV() +------------------+----------------+----------------+ | ["zero"] | ["zero"] | [zero] | | [, "if "" 1" ] | [ "if "" 1" ] | [ "if "" 1" ] | | [, ] | [ ] | [ ] | | [, " 3xt" \r\n] | [ " 3xt" ] | [ " 3xt" ] | | [,"png""\n""\n] | ["png""\n""\n] | [png"\n"] | | [,12345] | [12345] | [12345] | | [,""\r\n] | [""\r\n] | [""] | | [,12\r666\r\n] | [12\r666\r\n] | [12\r666] | | [,12\r\n] | [12\r\n] | [12] | | [,"con blanco"] | ["con blanco"] | [con blanco] | | [,"con,coma"] | ["con,coma"] | [con,coma] | +------------------+----------------+----------------+
1.a) [15 pts]
Especifique la función "automataCSV()" 
que sirve para obtener y almacenar en una hilera todos los 
caracteres que componen el siguiente campo CSV. Incluya los datos 
de prueba
BUnit en su respuesta.
1.b) [18 pts]
Use su función "automataCSV()" para
implementar 
la función "getNextCSV()" de la
tarea programada. El trabajo que debe 
hacer es invocar primero "automataCSV()" y luego, si 
el campo CSV obtenido está de acuerdo a la especificación
RFC-4180,
procederá a removerle las parejas de comillas dobles 
[""] sustituyéndolas por una sola comilla 
doble ["].
2) [33 pts]
+--------------------------------+
| MZ..<...'.....7.......o....... |
| ..triturar.................... |
| ..g...6........)("33$.....J... |
| ..P...=...matar........?!??;;^ |
| o.z.o.i.o...o...o...o...o..... |
| ..n...j...f...b.destruir..V... |
| .....bonga..i.H.i.3.i...i...i. |
| i...i...i...i.matanga...i.'.i. |
| ......}...A...1...$....canga.. |
+--------------------------------+
           chunga.exe
 | 
     
Jimmy Neutron descubrió que muchos de los programas 
ejecutables que usan los estudiantes de la
ECCI incluyen comandos 
satánicos que es necesario censurar. Para eso, propuso 
construir un
módulo que 
recibe como entrada un programa ejecutable y produce una lista de 
las palabras que contiene el texto, en donde "palabra" significa 
"varias letras juntas, sin espacios ni caracteres raros".
 Escriba un programa que permita extraer todas las hileras de un archivo. Incluya un argumento que indique cuál es el tamaño mínimo de una palabra, para evitar que letras solas aparezcan en la salida. Su programa no debe imprimir cada palabra más de una vez.  | 
3) [33 pts] El problema del método
replace() de la hilera C++ estándar es que no 
permite una sub-hilera como argumento. Por ejemplo, no es posible 
cambiar de un sólo tirón una palabra por otra 
así:
{
    std::string str;
    // ...
    str.replace("banano", "gorila");
}
3.a) [15 pts]
Especifique la clase "str_replace" que aporta la 
funcionalidad ya mencionada, pero recuerde que en muchas ocasiones 
una sub-hilera aparece en varios lugares dentro de la hilera. 
Incluya los datos de prueba
BUnit en su respuesta.
3.b) [15 pts] Implemente su clase.
3.c) [3 pts]
Explique si vale la pena o no que su nuevo método 
"replace()" sea implementado como un método
"inline".
  Adolfo Di Mare <adolfo@di-mare.com>.
    
       
   | 
  
    
       
   | 
  
    
       
   |